我需要在bash中使用参数,我可以使用参数h
,c
,p
,s
,a
但我无法接受参数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
答案 0 :(得分:2)
我发现你的实施存在两个缺陷:
b
之后没有冒号你的getops字符串应如下所示:
while getopts "h:c:p:s:ab:" opt; do
...
如果你希望getopts期望一个选项的参数,只需在后面放一个:(冒号)正确的选项标志
和
如果option-string的第一个字符是:(冒号),那么 通常是胡说八道,因为前面没有选项字母 它,getopts切换到"无声错误报告模式"。富有成效 脚本,这通常是你想要的,因为它允许你处理 在不受烦人信息干扰的情况下自己犯错误。
答案 1 :(得分:0)
您的参数'b'后缺少':'。同样'a'看起来像一个布尔标志,所以在这种情况下没有':'。
答案 2 :(得分:0)
从手册:
如果一个字符后面跟一个冒号,那么该选项应该是 有一个参数,应该作为一个单独的参数提供。
所以b
需要后面跟冒号。