在shell中,经常需要处理一些特殊的变量,从这些变量里获取必要的信息,常用的变量包括:$#,$*,$@,$0,$?

下面来进行详细说明

$#,调用脚本的命令行参数的个数。

$*和$@,脚本的命令行参数,有多少算多少,两者的区别可以用一个例子说明:如果有一个参数是"two words",那么,对于$*来说,这是两个值,而$@会把这个认为是一个值。

$0,脚本命令行中的第1个值,也就是启动脚本所使用的命令的名称,如果一个脚本可以被用多个名称调用,检查这个变量就变得有意义了,而$1则是命令行的第1个参数,后面的数值依次类推。

$?,前一个命令的返回值,如果前一个命令返回成功,$?的值就是0,否则会是一个非零值。(在没有return的情况下适用,具体见后面的实例)

$$,当前进程的id

 

  1. #!/bin/bash 
  2. E_PARAM_ERR=-198 
  3. EQUAL=-199 
  4. max2() 
  5. if [ -z "$2" ] 
  6. then 
  7.   return $E_PARAM_ERR 
  8. fi 
  9.  
  10. if [ "$1" -eq "$2" ] 
  11. then 
  12.   return $EQUAL 
  13. else 
  14.   if [ "$1" -gt "$2" ] 
  15.   then 
  16.     return $1 
  17.   else 
  18.     return $2 
  19.   fi 
  20. fi 
  21. max2 33 34 
  22. #echo $? 这里的$?为34
  23. return_val=$? #这里的$?为0
  24. #echo $? 这里的$?为0
  25. if [ "$return_val" -eq $E_PARAM_ERR ] 
  26. then 
  27.   echo "Need to pass two parameters to the function." 
  28. elif [ "$return_val" -eq $EQUAL ] 
  29.    then 
  30.      echo "The two numbers are equal." 
  31. else 
  32.      echo "The larger of the two numbers is $return_val." 
  33. fi 
  34. exit 0 

 

  1. sucre@sucre-ubuntu:~$ echo $$ 
  2. 1241 
  3. sucre@sucre-ubuntu:~$ echo $? 
  4. sucre@sucre-ubuntu:~$  

我个人觉得$?用的比其它的要多一些,所以在这里多说了一些。