方法。它是一个好主意用来检查你的参数,以确保在使用它们之前确实有数据:
$ cat test7 #!/bin/bash
# testing parameters before use if [ -n \then
echo Hello $1, glad to meet you. else
echo \’t identify yourself.\Fi
$ ./test7 Rich
Hello Rich, glad to meet you. $ ./test7
Sorry, you didn’t identify yourself. $
在这个例子中,我使用-n参数测试命令来检查命令行参数是否有数据。在下一节中,你会看到有另一种方式来检查命令行参数。
Special Parameter Variables(特殊参数变量)
在bash shell命令行参数中有一些特殊的变量。这部分描述了他们是什么,以及如何使用它们。
Counting parameters(计数参数)
就像你在上一节看到的,它通常是一个好主意,在你使用命令行参数之前先验证一下它们。对于使用多个命令行参数的脚本,这是乏味的。 你可以只计算命令行上输入的参数,而不是测试每个参数。bash shell为此提供了一个特殊的变量。
$#变量包括命令行参数的数量当脚本运行的时候。在脚本中的任何地方,你都可以使用这个特殊的变量,就像一个普通的变量:
$ cat test8 #!/bin/bash
# getting the number of parameters echo There were $# parameters supplied. $ ./test8
There were 0 parameters supplied. $ ./test8 1 2 3 4 5
There were 5 parameters supplied. $ ./test8 1 2 3 4 5 6 7 8 9 10 There were 10 parameters supplied. $ ./test8 \
There were 1 parameters supplied. $
现在,你有能力在尝试使用它们之前测试参数的数目:
$ cat test9
#!/bin/bash
# testing parameters if [ $# -ne 2 ] then
echo Usage: test9 a b else
total=$[ $1 + $2 ] echo The total is $total fi $ ./test9 Usage: test9 a b $ ./test9 10 Usage: test9 a b $ ./test9 10 15 The total is 25 $ ./test9 10 15 20 Usage: test9 a b $
If-then语句使用测试命令来执行一个命令行提供的参数个数的测试。如果正确的参数数字不存在,你可以显示错误信息,关于正确使用脚本的。
这个变量还提供了一个很酷的方式来抓取命令行上的最后一个参数
而不用知道一共有多少参数被使用。然而,你需要使用一个小把戏来达到这个目的。
如果你思考了这个问题,你可能会认为既然$#包含参数的值,那么变量$ { $ # }将是最后一个命令行参数变量。尝试一下,看看会发生什么:
$ cat badtest1 #!/bin/bash
# testing grabbing last parameter echo The last parameter was ${$#} $ ./badtest1 10
The last parameter was 15354 $
哇,这里发生了什么事?很显然,发生了一些错误。原来,你不能 在括号内使用美元符号。相反,你必须有一个符号来取代美元符号 。这很奇怪,但有用:
$ cat test10 #!/bin/bash
# grabbing the last parameter params=$#
echo The last parameter is $params echo The last paramerer is ${!#} $ ./test10 1 2 3 4 5