linux学习笔记 下载本文

位命令来移动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