The last parameter is 5 The last paramerer is 5 $ ./test10
The last parameter is 0 The last parameter is ./test10 $
很完美,这个测试指定$#变量参数的变量值,然后使用该变量的特殊的命令行参数变量的格式。两个版本都工作。同样重要的是要注意到,当命令行没有任何参数时,$#价值为零,这就是参数可变,但$ {!# }变量在命令行上返回脚本名称。
Grabbing all the data(抓取所有的数据)
有时,你会想遍历所有的提供的命令行参数。而不是乱用$#变量来确定多少的参数是在命令行中,然后遍历所有的他们,你可以使用一些特殊的变量。
$ *和$ @变量为你的所有参数提供一站式购物服务。这两个变量包括所有的命令行参数在一个单一的变量中。
$ *变量把在命令行上提供的所有参数都看作一个字。每一个单词都包含在命令行上出现的值。而不是把参数作为多个对象,$ *变量将他们作为一个参数来对待。
另一方面,$ @变量,需要把命令行上提供的所有参数作为同一个字符串中的单独的单词。它允许你通过迭代值,分离出各参数提供。这
是最经常使用的命令。
通过使用命令遍历特殊变量,你可以看到他们如何的对待命令行参数。$ *变量处理所有参数都是一个字,而$ @变量单独处理每个参数。
Being Shifty()
在你的bash shell中,你的另一个工具是是移位指令。bash shell提供移动命令来帮助我们处理命令行参数。它将命令行参数转移到相对位置。
当你使用shift命令,它把各参数变量向默认的位置降低一级。因此,变量3的值被转移到2,2的值转移到1,1值被丢弃(注意变量$ 0,程序名称,保持不变)。
这是一个通过命令行参数迭代的好方法,尤其是如果你不知道有多少参数可用。你可以操作第一个参数,然后将参数转移到第一个参数上。 这是一个简短的示例:
该脚本执行一个循环,测试了第一个参数值的长度。当第一个参数的
长度为零时,循环结束。
测试完的第一个参数后,shift命令是用来转移一个位置的所有参数。 另外,您可以通过向shift命令提供一个参数来执行多个位置移动。只要提供你想要改变的地方:
$ cat test14 #!/bin/bash
# demonstrating a multi-position shift echo \shift 2
echo \’s the new first parameter: $1\$ ./test14 1 2 3 4 5
The original parameters: 1 2 3 4 5 Here’s the new first parameter: 3 $
通过使用移位命令中的值,可以很容易地跳过不需要的参数。
Working With Options(使用选项)
如果你一直跟随在这本书中,你就已经见过几个bash命令提供参数和选项。本节显示了三种不同的方法在你的脚本中使用选项。 Finding your options
在表面上,命令行选项没有什么特别的。他们出现在命令行上,紧跟在脚本名称之后,就和命令行参数一样。事实上,如果你想要的话,
你可以用处理命令行参数同样的方式来处理命令行选项。 Processing simple options(处理简单的选项)
在test13你看到了如何使用shift命令设置的脚本程序。你可以使用同样的技术来操作命令行选项。
当你提取各个参数时,用case语句来确定把参数格式化为一个选项:
$ cat test15 #!/bin/bash
# extracting command line options as parameters while [ -n \do
case \
-a) echo \-b) echo \-c) echo \*) echo \esac shift done
$ ./test15 -a -b -c -d Found the -a option Found the -b option Found the -c option