测试标志是否有参数

时间:2016-12-06 17:37:53

标签: bash getopts

我解析命令行选项的典型设置是:

CONF=""
INPUT=""
while getopts ":c:i:" FLAG; do
   case $FLAG in
      i) INPUT=$OPTARG;;
      c) CONF=$OPTARG;;
      \?) echo -e "\nInvalid option: -$OPTARG"
         usage;;
      :) echo -e "Option -$OPTARG requires an argument."
         usage;;
   esac
done
if [ "$#" -eq 0 ]; then
    usage
fi

我正在寻找一种方法来捕获何时提供有效标志但没有参数 - 例如:

./Script.sh -c -i 

返回usage。我的印象是这一行:

:) echo -e "Option -$OPTARG requires an argument."

处理这个但是当使用不带参数的标志运行上面的脚本时,使用函数不会触发,也不是echo。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您使用./script.sh -c -i -c./script.sh -c调用脚本,则两者都会显示错误消息Option -c requires an argument.

然而,在调用./script.sh -c -i时,您正在传递价值" -i"对于-c参数,以便在参数解析结束时,您最终得到CONF=-cINPUT not set