一、特殊变量概述
在shell中有两类特殊的变量,一类被称为位置变量,另一类被称为进程状态变量。下面列出位置变量和进程状态变量的具体内容:
- 位置变量
变量 | 描述 |
$0 | 获取当前执行的shell脚本的文件名,包括脚本路径 |
$n | 获取当前执行的shell脚本的第n个参数值,n=1...9,如果n>9,使用括号扩起来$(10) |
$* | 获取当前shell的所有参数,将所有的命令行参数当作单个字符串,相当于“$1$2$3...” |
$@ | 获取程序的所有的参数,“$1” “$2”... |
$# | 获取当前执行的shell脚本后面紧跟的参数个数 |
- 进程状态变量
变量 | 描述 |
$$ | 获取当前shell的进程号(PID) |
$! | 执行上一个命令的PID |
$? | 获取执行上一个指令的返回值(0为成功,非0为失败) |
$_ | 在此之前执行的命令或脚本的最后一个参数 |
二、位置变量
1、$0
[root@localhost project]# cat test.sh echo $0 [root@localhost project]# sh test.sh test.sh [root@localhost project]# sh `pwd`/test.sh /project/test.sh
2、$n
[root@localhost project]# cat test.sh echo $1 [root@localhost project]# sh test.sh xiaoshen xiaoshen [root@localhost project]# sh test.sh xiaoshen xiaozhang xiaoshen [root@localhost project]# sh test.sh "xiaoshen xiaozhang" xiaoshen xiaozhang
$1表示接收一个参数,加引号表示一个参数。
3、$*
[root@localhost project]# cat test.sh echo $* [root@localhost project]# sh test.sh xiaoshen xiaozhang xiaoshen xiaozhang
4、$@
[root@localhost project]# cat test.sh echo $@ [root@localhost project]# sh test.sh xiaoshen xiaozhang xiaoshen xiaozhang
5、$#
[root@localhost project]# cat test.sh echo $1 echo $# [root@localhost project]# sh test.sh xiaoshen xiaozhang xiaoshen 2
三、进程状态变量
1、$$
[root@localhost project]# echo $$ 1973
$$另一个应用是总是启动同一个脚本,如果该脚本已经启动,可以kill掉然后重启,可以先将该脚本运行后的pid存入到文本文件,如果再次运行该脚本,先去读取pid,kill掉重启。
#!/bin/sh PID_PATH=/project/a.pid if [ -f "$PID_PATH" ] then kill -USER2 `cat $PID_PATH`>/dev/null 2>&1 rm -f $PID_PATH fi echo $$>$PID_PATH sleep 200
2、$?
[root@localhost project]# echo $$ 1973 [root@localhost project]# echo $? 0