位命令来移动2个位置。
正如基本功能一样,这个过程可以在任何你所选择的地方工作(请记住,包括每个选项的适当的选项参数):
$ ./test17 -b test1 -a -d
Found the -b option, with parameter value test1 Found the -a option -d is not an option $
现在你有能力在你的脚本中处理命令行选项,但这也有局限性,例如,如果你尝试将多个选项组合在一个参数中,这将不工作:
$ ./test17 -ac -ac is not an option $
在Linux中这是一种常见的结合选项的做法,如果你的脚本是用户友好的,你要为你的用户提供这一功能。幸运的是,还有另一种方法可以帮助我们。
Using the getopt command(使用getopt命令)
getopt命令是处理命令行选项和参数的一个很好的工具。它将更容易在你的脚本中分析命令行参数。 The command format(命令格式)
getopt命令可以列出任何形式的命令行选项和参数,并且自动把它们转换成适当的格式。它使用命令格式:
getopt options optstring parameters
它定义了命令行中使用的有效选项。它还定义了哪些选项需要一个参数值。
首先,列出每一个你要在你的脚本中使用的命令行选项。然后,在需要参数值的选项后放置一个冒号。 这是一个简单的例子:
$ getopt ab:cd -a -b test1 -cd test2 test3 -a -b test1 -c -d -- test2 test3 $
optstring定义了四个有效的选项的字母,A,B,C,D。它还定义了选项B需要一个参数值。当getopt命令运行时,它检查提供的参数列表。
如果你指定的一个选项不在optstring,默认情况下getopt命令产生一个错误信息:
$ getopt ab:cd -a -b test1 -cde test2 test3 getopt: invalid option -- e -a -b test1 -c -d -- test2 test3 $
如果你宁愿忽略错误信息,使用-q选项的命令:
$ getopt -q ab:cd -a -b test1 -cde test2 test3 -a -b ’test1’ -c -d -- ’test2’ ’test3’ $
注意,getopt命令选项必须列在optstring之前。现在你应该可以准备好在你的脚本中使用这个命令处理命令行选项。
Using getopt in your scripts(在你的脚本中使用getopt) 您可以使用脚本getopt命令格式的任何命令行选项或参数输入脚本。这有点棘手,但可以使用。
诀窍是用格式化的版本替换现有getopt命令生成命令行选项和参数。做这个的方法是使用集合命令。
在第5章中,你看到了设置的命令。在脚本中的不同的变量设置命令的工作。5章展示了如何使用集合命令来显示所有的系统环境变量。设置命令的选项之一是双冲。
然后,诀窍是将原始脚本命令行参数getopt命令,然后送给设置命令和格式化好的getopt取代原来的命令行参数getopt命令的输出。这看起来像这样:
set -- `getopts -q ab:cd \
使用这种技术,我们现在可以编写脚本来处理我们的命令行参数:
$ cat test18 #!/bin/bash
# extracting command line options and values with getopt
set -- `getopt -q ab:c \while [ -n \
do
case \
-a) echo \-b) param=\
echo \the -b option, with parameter value $param\shift ;;
-c) echo \--) shift break;;
*) echo \Esac shift done count=1
for param in \do
echo \count=$[ $count + 1 ] done $
你会注意到,这与test17的脚本是基本相同的。唯一改变的是getopt