首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash -使用getop将第二个参数解析为变量

bash -使用getop将第二个参数解析为变量
EN

Stack Overflow用户
提问于 2019-04-03 01:28:40
回答 1查看 116关注 0票数 0

如何在下面的脚本中使用bash和getopt将第二个参数解析为变量。

我可以做sh test.sh -u并让"userENT“显示。但是,如果我在这个脚本上执行sh test.sh -u testuser,就会得到一个错误。

代码语言:javascript
复制
#!/bin/sh

# Now check for arguments
OPTS=`getopt -o upbdhrstv: --long username,password,docker-build,help,version,\
  release,remote-registry,stage,develop,target: -n 'parse-options' -- "$@"`



while true; do
  case "$1" in
    -u | --username) 
            case "$2" in
               *) API_KEY_ART_USER="$2"; echo "userENT" ;shift ;;
            esac ;;
    -- ) shift; break ;;
    * ) if [ _$1 != "_" ]; then ERROR=true; echo; echo "Invalid option $1"; fi; break ;;

   esac
done
echo "user" $API_KEY_ART_USER

如何传递-u测试用户而不具有无效选项testuser?

产出:

代码语言:javascript
复制
>sh test3.sh -u testuser
userENT

Invalid option testuser
user testuser
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 05:05:08

man getopt会告诉您,选项后面的冒号表示它有一个参数。在v之后只有一个冒号,在循环中也没有shift,所以您将无法解析第一个选项之后的任何选项。我不知道为什么您认为需要有第二个只有一个默认选项的case语句。此外,在您的代码中有许多错误的实践,包括使用所有caps、变量名和backticks来执行命令,而不是使用$()。你已经给你的问题贴上了标签,bash,但你的问题是/bin/sh。尝试一下,但是在不了解代码的情况下,您不应该使用代码。

代码语言:javascript
复制
#!/bin/sh

# Now check for arguments
opts=$(getopt -o u:pbdhrstv: --long username:,password,docker-build,help,version,\
    release,remote-registry,stage,develop,target: -n 'parse-options' -- "$@")

while true; do
    case "$1" in
    -u|--username)
        shift
        api_key_art_user="$1"
        echo "userENT"
    ;;
    --)
        shift;
        break
    ;;
    *)
        if [ -n "$1" ]; then 
            err=true
            echo "Invalid option $1"
        fi
        break
    ;;
    esac
    shift
done
echo "user $api_key_art_user"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55485740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档