用途
处理命令行参数,并校验有效选项。
语法
getopts
选项字符串
名称
[
参数
...]
描述
getopts 命令是 Korn/POSIX shell 的内置命令,用来从参数列表检索选项以及选项参数。选项由一个 (加号)或者是由一个-(减号)后跟一个字符开始。一个既不是以 ,也不是以-开始的选项结束选项字符串。每次调用 getopts 命令时,它将下一个选项的值放置在名称 内,并将下一个要处理的参数的索引置于 shell 变量 OPTIND 中。一旦调用了 shell , OPTIND 将初始化为1。当选项以 开头,则 将预先设为名称中的值。
如果选项字符串中的字符后面带有“:”(冒号),则预期此选项将带有参数。当选项需要选项参数时,getopts 命令就将其置于变量 OPTARG 中。
当查找到 选项字符串所不包含的选项字符,或者查找到的选项没有所需的选项参数时:
- 如果选项字符串不以:(冒号)开头,
- 名称 将会被设置为 ?(问号)字符,
- OPTARG. 将被取消设置,并且
- 诊断消息将被写入到标准错误中。
这种情况被认为是在将参数传递给所调用的应用程序的过程中所检测到的错误,而不是在处理 getopts 命令的过程中所发生的错误;如上所述,写入诊断消息,但退出状态将变为零。
- 如果选项字符串以 :(冒号)开头,
- 名称 将被设为 ? (问号)字符,这是对未知的选项来说的,或者为缺少的所需选项设为:(冒号)字符,
- OPTARG 将被设置为已查找到的选项字符,并且
- 标准错误中将不写入任何输出。
以下任何字符都可以识别选项结尾:特殊选项- -,查找到不以-,或者 为开头的参数,或者遇到错误。
当遇到选项结尾时:
- getopts 命令将退出运行,并且返回值大于零,
- OPTARG 将被设置为第一个非选项参数索引,在这种情况下,如果第一个 - - 参数之前未出现其它非选项参数,将认为它是选项参数,或者如果没有非选项参数,设置为值 $# 1,
名称将被设置为? (问号)字符,
参数
选项字符串
包含 getopts 命令识别的选项字符串。如果字符后带有冒号,则预期选项将带有参数,应该以单独参数的形式提供此参数。可以用空格将选项与参数分隔开。如果选项字符是未知的或者选项参数丢失,则选项字符串中的第一个字符将决定 getopts 命令的行为。
注意:应用程序不应该将问号和冒号字符作为选项字符。使用其它非字母数字的字符会产生不明的结果。
名称
由 getopts 命令对查找到的选项字符设置。
参数 ...
一个或多个被空格分隔的字符串,由 getopts 命令校验是否是合法选项。如果省略参数 ,就使用位置参数。有关位置参数的更多信息,请参见 Korn Shell 中的
参数替换
。
注意: 一般来说,不必将参数指定为 getopts 命令的一部分,但在进行脚本调试时可能会有所帮助。
退出状态
此命令返回下列出口值:
0
查找到由选项字符串指定的或未指定的选项。
>0
遇到选项结束或发生错误。
示例
- 下列 getopts 命令规定 a、b 和 c 为有效选项,并且选项 a 和 c 带有参数: getopts a:bc: OPT
- 下列 getopts 命令指定 a、b 以及 c 为有效选项, 并且选项 a 和 b 带有参数,而且 getopts 在命令行遇到为定义的选项时,它将 OPT 的值设置为 ?: getopts :a:b:c OPT
- 下列脚本分析和显示其参数: aflag=
bflag=
while getopts ab: name
do
case $name in
a) aflag=1;;
b) bflag=1
bval="$OPTARG";;
?) printf"Usage: %s: [-a] [-b value] args/n" $0
exit 2;;
esac
done
if [ ! -z "$aflag" ]; then
printf "Option -a specified/ n"
fi
if [ ! -z "$bflag" ]; then
printf'Option -b "%s" specified/ n' "$bval"
fi
shift $(($OPTIND -1))
printf "Remaining arguments are: %s/n" "$*"
转载于http://hi.baidu.com/52hack/blog/item/e51f8d3554ff4e1990ef39cc.html