linux学习笔记 下载本文

方法。它是一个好主意用来检查你的参数,以确保在使用它们之前确实有数据:

$ 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