细则1:
当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument错误,内置变量$OPTARG就是出问题的option
invalid option时,变量name会被设成?;
miss option argument时,变量name会被设成:;
如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使varname被设成?。
细则2:
当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中
如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option。
否则varname的值是?,$OPTARG是该option.(参照细则1)
当optstring以”:“开头时,getopts会区分invalid option错误和miss option argument错误,内置变量$OPTARG就是出问题的option
invalid option时,变量name会被设成?;
miss option argument时,变量name会被设成:;
如果optstring不以”:“开头,invalid option错误和miss option argument错误都会使varname被设成?。
细则2:
当optstring中的字母跟”:“时,表明该option可接参数,参数(argument)放在$OPTARG中
如果缺参数,且optstring是以”:“开头,则varname的值会是:,$OPTARG是该option。
否则varname的值是?,$OPTARG是该option.(参照细则1)
#!/bin/bash
if [[ $# -lt 1 ]];then
echo "USAGE:`basename $0` [-a] [-b value] [-c]"
exit 1
fi
while getopts :ab:c name
do
case $name in
a) aflag=1
echo "a"
;;
b) bflag=1
if [[ ${OPTARG:0:1} = "-" ]]; then
echo "invalid parameter of $OPTARG"
exit 1
fi
bval=$OPTARG
;;
c) cflag=1
echo "c"
;;
\?) echo "Invalid option :`basename $0` [-a] [-b value] [-c]"
exit 1
;;
:) echo "$0:Must supply an argument to -$OPTARG."
exit 1
;;
esac
done
echo $bval
注意
1.如果你执行脚本时,后面什么参数都不带时,则不会进入到循环
while getopts :ab:c name
所以还是需要通过以下代码来警告
if [[ $# -lt 1 ]];then
echo "USAGE:`basename $0` [-a] [-b value] [-c]"
exit 1
fi
2.在getopts分析选项时,如果-b后面不带参数,直接跟-c的话,那么-c将作为-b的参数。