Bash 测试标志是否有参数
我分析命令行选项的典型设置是:Bash 测试标志是否有参数,bash,getopts,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."
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
返回用法
。我的印象是这一行:
:) echo -e "Option -$OPTARG requires an argument."
但是,当如上所述使用不带参数的标志运行脚本时,usage函数不会启动,echo也不会启动
我做错了什么?如果使用
/script.sh-c-I-c
或/script.sh-c
调用脚本,两者都将显示错误消息选项-c需要参数。
但是,当调用
/script.sh-c-i
时,您正在为-c
参数传递值“-i”,因此在参数解析结束时,您会得到CONF=-c
和输入未设置
啊,是的-当然。我猜这可能不容易解决?您可以通过检查OPTARG是否与另一个现有标志匹配来解决这一问题,但我很惊讶getopts
本身并没有提供这一点。