在shell中,经常需要处理一些特殊的变量,从这些变量里获取必要的信息,常用的变量包括:$#,$*,$@,$0,$?
下面来进行详细说明
$#,调用脚本的命令行参数的个数。
$*和$@,脚本的命令行参数,有多少算多少,两者的区别可以用一个例子说明:如果有一个参数是"two words",那么,对于$*来说,这是两个值,而$@会把这个认为是一个值。
$0,脚本命令行中的第1个值,也就是启动脚本所使用的命令的名称,如果一个脚本可以被用多个名称调用,检查这个变量就变得有意义了,而$1则是命令行的第1个参数,后面的数值依次类推。
$?,前一个命令的返回值,如果前一个命令返回成功,$?的值就是0,否则会是一个非零值。(在没有return的情况下适用,具体见后面的实例)
$$,当前进程的id
- #!/bin/bash
- E_PARAM_ERR=-198
- EQUAL=-199
- max2()
- {
- if [ -z "$2" ]
- then
- return $E_PARAM_ERR
- fi
- if [ "$1" -eq "$2" ]
- then
- return $EQUAL
- else
- if [ "$1" -gt "$2" ]
- then
- return $1
- else
- return $2
- fi
- fi
- }
- max2 33 34
- #echo $? 这里的$?为34
- return_val=$? #这里的$?为0
- #echo $? 这里的$?为0
- if [ "$return_val" -eq $E_PARAM_ERR ]
- then
- echo "Need to pass two parameters to the function."
- elif [ "$return_val" -eq $EQUAL ]
- then
- echo "The two numbers are equal."
- else
- echo "The larger of the two numbers is $return_val."
- fi
- exit 0
- sucre@sucre-ubuntu:~$ echo $$
- 1241
- sucre@sucre-ubuntu:~$ echo $?
- 0
- sucre@sucre-ubuntu:~$
我个人觉得$?用的比其它的要多一些,所以在这里多说了一些。