Skip to content

case语句的fall through

当然我说的是SHELL,不是其它的编程语言。 在看<学习KSH》中看到,把’;&’字串放在case语句中,会让case语句“fall through”(暂时没想到如何翻译,看下面的脚本输出来看看fall through是怎么回事)。实际 测试了一下发现,OpenBSD (5.8)以及DragonFly BSD (4.2)中的KSH不支持这个功能。因为他们的KSH所谓的pdksh衍生版(public domain korn shell),而Ubuntu (15.04)中通过apt-get安装的ksh是原始的Korn Shell,支持’;&’的fall through功能。 BASH shell则是从4.0版以后开始支持。 脚本: A=2 case $A in 1) echo “QUICK” ;& 2) echo “BROWN” ;& 3) echo “FOX” ;& 4) echo “JUMPED” ;; esac Ubuntu: acheng@cactus:~$…

Read more

GETOPTS中的OPTIND

最近对shell中的OPTIND变量有些糊涂,想要查看文档弄清楚。可惜无论KSH还是BASH的手册中对这个变量都只是提了一下定义:OPTIND是一个索引,用于指向调用getopts函数时需要处理的参数,它的初始值为1。并没有展开论述,也没有范例。 如果只看这个定义的话,倒也很清楚。不过实际一测试,反而容易糊涂,尤其是碰到需要值(argument)的参数。请看下面一个简单的示例脚本: 在Linuxmint/ubuntu上: #!/bin/bash while getopts “abc:” flag do echo “$flag” $OPTIND $OPTARG done 这里我们的脚本可以处理3个参数,a, b和c,其中c参数需要跟一个值。实际运行结果如下: ┌[acheng@azalea]-(~) └> ./test.sh -a -b -c xd a 2 b 3 c 5 xd 调用getopts之前,OPTIND的值为初始值1,getopts被调用后返回第一个参数a,同时OPTIND变为2,因此第二次调用getopts时返回第二个参数b,同时OPTIND变为3。同理,第三次调用getopts时返回第三个参数c,同时OPTIND变为5,因为值xd也同样算一个数的。第四次调用getopts时,由于不存在第五个参数,getopts返回-1,while循环结束。 看起来很清楚,没什么好糊涂的。 下面我们再看一下把参数合并后脚本运行的结果: ┌[acheng@azalea]-(~) └> ./test.sh -abc xd a 1…

Read more
Sidebar