Content #
aflag=
bflag=
while getopts 'ab:' OPTION
do
case $OPTION in
a)
aflag=1
;;
b)
bflag=1
bval="$OPTARG"
;;
?)
printf "Usage: %s: [-a] [-b value] args\n" $(basename $0) >&2
exit 2
;;
esac
done
shift $(($OPTIND – 1))
if [ "$aflag" ]
then
printf "Option -a specified\n"
fi
if [ "$bflag" ]
then
printf 'Option -b "%s" specified\n' "$bval"
fi
printf "Remaining arguments are: %s\n" "$*"
‘ab:‘的含义 #
a为开关选项。b后有’:’,表示带参数的选项,比如 -u username。
getopts与while结合 #
getopts 'ab:' OPTION
getopts在解析参数列表($1, $2, …)时,如果找到了带减号("-")的参数,就把减号后的字母放入变量$OPTION,并返回true。把getopts放到while循环中,就可以不断读取参数,直至结束。两个减号("–")会结束option的解析。
OPTIND #
shift $(($OPTIND - 1))
$OPTIND记录了getopts正在使用的参数列表的下标。
myscript -a -b alt plow harvest reap
对于上面的命令,getopts执行结束后,$OPTIND的值为4,调用shift之后,$*的内容会是:
plow harvest reap
printf中就可以直接使用。