shell_40.Linux特殊参数变量

特殊参数变量
(1)特殊变量$#含有脚本运行时携带的命令行参数的个数。可以在脚本中的任何地方使用这个特殊变量,就跟普通变量一样:

$ cat countparameters.sh 
#!/bin/bash 
# Counting command-line parameters 
# 
if [ $# -eq 1 ] 
then 
    fragment="parameter was" 
else 
    fragment="parameters were" 
fi 
    echo $# $fragment supplied. 
exit 
$ 
$ ./countparameters.sh 
0 parameters were supplied. 
$ 
$ ./countparameters.sh Hello 
1 parameter was supplied. 
$ 
$ ./countparameters.sh Hello World
2 parameters were supplied. 
$ 
$ ./countparameters.sh "Hello World" 
1 parameter was supplied. 
$

(2)可以在使用之前测试命令行参数的数量:

$ cat addem.sh 
#!/bin/bash 
# Adding command-line parameters 
# 
if [ $# -ne 2 ]                     #######if-then 语句用-ne 测试检查命令行参数数量。如果数量不对,则会显示一条错误消息,告知脚本的正确用法
then 
    echo Usage: $(basename $0) parameter1 parameter2 
else 
    total=$[ $1 + $2 ] 
    echo $1 + $2 is $total 
fi 
exit 
$ 
$ ./addem.sh 
Usage: addem.sh parameter1 parameter2 
$ 
$ ./addem.sh 17 
Usage: addem.sh parameter1 parameter2 
$ 
$ ./addem.sh 17 25 
17 + 25 is 42 
$

(3)如果仔细考虑过,你可能会觉得既然$#变量含有命令行参数的总数,那么变量${$#}应该就代表了最后一个位置变量:

$ cat badlastparamtest.sh 
#!/bin/bash 
# Testing grabbing the last parameter 
# 
echo The number of parameters is $# 
echo The last parameter is ${$#} 
exit 
$ 
$ ./badlastparamtest.sh one two three four 
The number of parameters is 4 
The last parameter is 2648 
$ 

(4)显然,这种方法不管用。这说明不能在花括号内使用$,必须将$换成!。很奇怪,但的确有效:

$ cat goodlastparamtest.sh 
#!/bin/bash 
# Testing grabbing the last parameter 
# 
echo The number of parameters is $# 
echo The last parameter is ${!#} 
exit 
$ 
$ ./goodlastparamtest.sh one two three four 
The number of parameters is 4 
The last parameter is four 
$ 
$ ./goodlastparamtest.sh 
The number of parameters is 0 
The last parameter is ./goodlastparamtest.sh 
$ 


完美。重要的是要注意,当命令行中没有任何参数时,$#的值即为 0,但${!#}会返回命令行中的脚本名。

你可能感兴趣的:(linux,服务器,运维)