全部博文(297)
分类: LINUX
2007-08-22 12:59:49
处理命令行参数,并校验有效选项。
getopts [ ...]
getopts 命令是 Korn/POSIX shell 的内置命令,用来从参数列表检索选项以及选项参数。选项由一个+(加号)或者是由一个-(减号)后跟一个字符开始。一个既不是以+,也不是以-开始的选项结束选项字符串。每次调用 getopts 命令时,它将下一个选项的值放置在名称 内,并将下一个要处理的参数的索引置于 shell 变量 OPTIND 中。一旦调用了 shell , OPTIND 将初始化为1。当选项以 +开头,则+ 将预先设为名称中的值。
如果选项字符串中的字符后面带有“:”(冒号),则预期此选项将带有参数。当选项需要选项参数时,getopts 命令就将其置于变量 OPTARG 中。
当查找到 选项字符串所不包含的选项字符,或者查找到的选项没有所需的选项参数时:
这种情况被认为是在将参数传递给所调用的应用程序的过程中所检测到的错误,而不是在处理 getopts 命令的过程中所发生的错误;如上所述,写入诊断消息,但退出状态将变为零。
以下任何字符都可以识别选项结尾:特殊选项- -,查找到不以-,或者+为开头的参数,或者遇到错误。
当遇到选项结尾时:
选项字符串 | 包含 getopts 命令识别的选项字符串。如果字符后带有冒号,则预期选项将带有参数,应该以单独参数的形式提供此参数。可以用空格将选项与参数分隔开。如果选项字符是未知的或者选项参数丢失,则选项字符串中的第一个字符将决定 getopts 命令的行为。
注意:应用程序不应该将问号和冒号字符作为选项字符。使用其它非字母数字的字符会产生不明的结果。 |
名称 | 由 getopts 命令对查找到的选项字符设置。 |
参数 ... | 一个或多个被空格分隔的字符串,由 getopts 命令校验是否是合法选项。如果省略参数 ,就使用位置参数。有关位置参数的更多信息,请参见 Korn Shell 中的 参数替换。
注意: 一般来说,不必将参数指定为 getopts 命令的一部分,但在进行脚本调试时可能会有所帮助。 |
此命令返回下列出口值:
0 | 查找到由选项字符串指定的或未指定的选项。 |
>0 | 遇到选项结束或发生错误。 |
getopts a:bc: 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" "$*"