命令行处理参数getopt与getopts相似但略有不同,主要包含以下几点:
1. getopt是独立命令,getopts是bash是buildins;
2. getopts不支持长选项,如--help不可识别,而getopt可以,并且功能更丰富;
例1:getopts
while getopts "a:bc" OPT
do
case $OPT in
"a")
echo "a case"
str=$OPTARG
;;
b)
echo "b case"
;;
c)
echo "c case"
;;
esac
done
使用getopts会自动产生两个变量$OPTIND和$OPTARG,OPTIND初始值为1,是下一个要处理的参数的索引,如果存在下一个参数,则返回true,故while循环会继续向下,如果case命中,则$OPTARG为其后相应的参数,即-a后的参数值。
注:
1. 选项后面有冒号,表示该选项需要参数,否则不需要参数;如果冒号放在最前面,则表示静默模式,在静默模式下,当用户输入的参数不满足OPTSTRING时,不会讲illegal option这样的错误信息打印出来
2. case选项中双引号可加可不加;
3. 最后一个选项后面的两个分号可以不加,加上也不受影响;
4. 在函数中使用getopts,第二次调用函数时getopts就会失效,不再解析参数,是由于第一次调用后OPTIND变量就被赋值了,再次调用就不会再解析了,为了防止该问题,在函数开始前将OPTIND进行置空,加入如下代码就可以了:
unset OPTIND
阅读(571) | 评论(0) | 转发(0) |