linux学习笔记 下载本文

选项。

现在当你使用复杂的选项运行脚本时,事情就更好了:

$ ./test18 -ac Found the -a option Found the -c option $

当然,所有的原始功能工作都很好

$ ./test18 -a -b test1 -cd test2 test3 test4 Found the -a option

Found the -b option, with parameter value ’test1’ Found the -c option Parameter #1: ’test2’ Parameter #2: ’test3’ Parameter #3: ’test4’ $

现在事情看起来很漂亮。然而,还有一个小bug,潜伏在getopt命令。看看这个例子:

$ ./test18 -a -b test1 -cd \Found the -a option

Found the -b option, with parameter value ’test1’ Found the -c option Parameter #1: ’test2

Parameter #2: test3’ Parameter #3: ’test4’ $

getopt命令不善于处理有空格的参数值。将空格作为参数分隔符,而不是跟随双引号,将两者结合成一个参数。对我们来说幸运的是,还有一个解决这个问题的解决方案。 The more advanced getopts

getopts命令是建立在bash shell上的。它看起来很像getopt表哥,但有一些扩展功能。

不像getopt,所有的在命令行中的选项和参数都只有一个输出。 当它无参运行时,它的退出状态大于零。这使得在命令行中使用循环来分析所有的参数是非常好的。 getopts命令的格式是:

getopts optstring variable

optstring的值与用getopt命令的相似。如果列表有效选项要求参数值,往往伴随着一个冒号。为了抑制错误信息,以冒号来开始optstring。

Getopts使用的环境变量有两个,一个是OPTARG,另一个是OPTIND。 让我们看一个使用getopts命令的简单例子:

$ cat test19 #!/bin/bash

# simple demonstration of the getopts command