我正在尝试运行以下脚本getopts
来解析选项,但它似乎不起作用:
#!/bin/bash
set -x
echo $@
while getopts "rf" opt
do
case "${opt}" in
r)
ropt=${OPTARG}
;;
f)
fopt=${OPTARG}
;;
esac
done
shift $((OPTIND -1))
echo $fopt $ropt
我得到的输出是:
$ ./myscript.sh -f opt2 -r opt1
+ echo -f opt2 -r opt1
-f opt2 -r opt1
+ getopts rf opt
+ case "${opt}" in
+ fopt=
+ getopts rf opt
+ shift 1
+ echo
+ set +x
你对我做错了什么有任何想法吗?
您希望您的选项采用选项参数,但您不
getopts
知道这一点。你应该使用
即,每个接受参数的选项都应该
:
在参数字符串中以getopts
.您可能还希望最后有一个默认
case
分支来处理无效选项:(错误消息(关于无效选项或缺少选项参数)将自行显示
getopts
,usage
预计是您将定义的一个函数,它将向标准输出打印一条简短的帮助消息)。此外,不要忘记双引号所有扩展,甚至
$(( OPTIND - 1 ))
.与最后一点相关: