您的位置:首页 > 运维架构

getopts 的坑

2016-05-13 20:50 288 查看
getopts 真的比较坑啊。。。。语言描述不同,以下用例子来体现,对脚本文件 ./test.sh

#注意,选项一开始没有冒号
while getopts ab:c OPT; do
case $OPT in
a) echo "a";;
b) echo "b : $OPTARG";;
c) echo "c";;
\?) echo "wrong input";;
esac
done</span>


此时。如果输入是:

  ./test.sh -a -c -k -b

输出将是:

> a

> c

> Illege args -k

> wrong input

> no arg for -b option

> wrong input

 -k 是非法选项,报错后将OPT设置为 ? 。-b 之后没有选项值,则不符合要求,报错后将OPT设置为 ?

如果输入是:

 ./test -a -b -c  

注意:输出将是很坑的!!!!!!!!!!!!!

> a

> b : -c

这是 -b 选项将后面的 -c 选项当做了自己的值。。。然后就收了。然后也不报错。。。。看到这里心里也是醉了

此外要注意,在指定 getopts 的选项参数之前如果有冒号。则整个过程变为静默模式,也就是该报错的地方不报错,直接将取到的选项设置为 ? 号。(上面例子中的红色全部不输出)

#注意,选项一开始有冒号
while getopts :ab:c OPT; do
case $OPT in
a) echo "a";;
b) echo "b : $OPTARG";;
c) echo "c";;
\?) echo "wrong input";;
esac
done</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息