特殊参数变量
(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,但${!#}会返回命令行中的脚本名。