以bash为参考

时间:2015-07-01 08:46:46

标签: linux bash

我需要在bash中使用参数,我可以使用参数hcpsa但我无法接受参数b

为什么我不能接受它?这是我的剧本:

if [ ! -z $1 ]; then
    HOSTNAME=""
    CLIENT=""
    SUBSCRIPTIONS_GROUPS=""
    PROVIDER=""
    SERVER=""
    while getopts ":h:c:p:s:a:b" opt; do
            case $opt in 
                    h)  HOSTNAME=${OPTARG}
                            ;;
                    c)  CLIENT=${OPTARG}
                            ;;
                    p)      PROVIDER=${OPTARG}
                            ;;
                    s)  SUBSCRIPTIONS_GROUPS=${OPTARG}
                            ;;
                    a)  ALWAYS_ON="on"
                            ;;
                    b)  SERVER=${OPTARG}
                            ;;
                    ?)  ;;
            esac
    done
fi

3 个答案:

答案 0 :(得分:2)

我发现你的实施存在两个缺陷:

  • 第一个字符是冒号
  • b之后没有冒号

你的getops字符串应如下所示:

while getopts "h:c:p:s:ab:" opt; do
...
  

如果你希望getopts期望一个选项的参数,只需在后面放一个:(冒号)正确的选项标志

  

如果option-string的第一个字符是:(冒号),那么   通常是胡说八道,因为前面没有选项字母   它,getopts切换到"无声错误报告模式"。富有成效   脚本,这通常是你想要的,因为它允许你处理   在不受烦人信息干扰的情况下自己犯错误。

http://wiki.bash-hackers.org/howto/getopts_tutorial提取

答案 1 :(得分:0)

您的参数'b'后缺少':'。同样'a'看起来像一个布尔标志,所以在这种情况下没有':'。

答案 2 :(得分:0)

从手册:

  

如果一个字符后面跟一个冒号,那么该选项应该是   有一个参数,应该作为一个单独的参数提供。

所以b需要后面跟冒号。