Bash Shell中命令行选项/参数处理
转载自:http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html
?
Bash Shell中命令行选项/参数处理
0.引言
?? 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式。
?? 选项与参数:
?? 如下一个命令行:
?
执行./test.sh -f config.conf -n 10 会打印:
-f config.conf -n 10??? #这是"$*"的输出
-f?? #以下为$@的输出
config.conf
-n
10
?
?? 所以,手工处理的方式即对这些变量的处理。因为手工处理高度依赖于你在命令行上所传参数的位置,所以一般都只用来处理较简单的参数。如
?? ./test.sh 10
?? 而很少使用./test -n 10这种带选项的方式。 典型用法为:
现在就可以使用:
./test.sh -a arg -b -c
或
./test.sh -a arg -bc
来加载了。
应该说绝大多数脚本使用该函数就可以了,如果需要支持长选项以及可选参数,那么就需要使用getopt.
下面是getopt自带的一个例子:
比如我们使用
./test -a -b arg arg1 -c?
你可以看到,命令行中多了个arg1参数,在经过getopt和set之后,命令行会变为:
-a -b arg -c -- arg1
$1指向-a,$2指向-b,$3指向arg,$4指向-c,$5指向--,而多出的arg1则被放到了最后。
一般小脚本手工处理也许就够了,getopts能处理绝大多数的情况,getopt较复杂,功能也更强大。
有问题请指出,不胜感激。