对传给shell脚本的选项分析通常有两种方法,一种是通过case语句手工分析,另一种是通过getopts命令实现。
getopts的语法为:getopts option-string variable
option-string 为包含所有单字符选项的字符串,这些选项应该赋予一个变量,即variable
getopts支持额外的参数,通过在option-string中选项后面加上:字符即可实现。在这种情况下,选项被分析后,额外参数被设置为变量OPTARG的值
getopts分析过程
1 getopts检查所有参数,找到以"-"字符开头的字符
2 将"-"后的字符与option-string给出的字符比较
3 若找到匹配,则variable被设置成选项,否则被设置成"?"
若找到匹配且option-string中的字符后面有":",则读入下一个参数给OPTARG
4 重复1-3,直至处理完所有选项
5 当分析结束后,getopts设置变量OPTIND为上一参数的位置索引
例:
#!/bin/sh
USAGE="Usage: ‘basename $0‘ [-v] [-f file] [-o file]";
VERBOSE=false
while getopts f:o:v OPTION ; do
case "$OPTION" in
f) INFILE="$OPTARG" ;;
o) OUTFILE="$OPTARG" ;;
v) VERBOSE=true ;;
\?) echo "$USAGE" ;
exit 1 ;;
esac
done
shift `expr $OPTIND - 1`