Shell预定义变量 图片看不了?点击切换HTTP 返回上层
严格来说,位置参数变量也是预定义变量的一种,知识位置参数变量的作用比较统一,所以我们把位置参数变量单独划分为一类数量。
那么,预定义变量有哪些呢?我们通过表 1 来说明一下。
预定义变量 | 作 用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为 0,则证明上一条命令正确执行;如果这 个变量的值为非 0 (具体是哪个数由命令自己来决定),则证明上一条命令执行错误 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
我们先来看看"$?"这个变量,看起来不好理解,还是举个例子吧,如下:
[root@localhost sh]# ls
count.sh hello.sh parameter2.sh parameter.sh #ls命令正确执行
[root@localhost sh]# echo $?
0
#预定义变量"$?"的值是0,证明上一条命令正确执行
[root@localhost sh]# ls install.log
ls:无法访问install.log:没有那个文件或目录
#当前目录中没有instal.log文件,所以ls命令报错了
[root@localhost sh]# echo $?
2
#变量"$?"返回一个非0的值,证明上一条命令没有正确执行
#至于错误的返回值到底是多少,是在编写ls命令时定义好的,如果碰到文件不存在就返回数值2
接下来说明一下"$$"和"$!"这两个预定义变量,写一个脚本如下所示:
[root@localhost sh]# vi variable.sh
#!/bin/bash
echo "The current process is $$"
#输出当前进程的PID
#这个PID就是variable.sh脚本执行时生成的进程的PID
find /root -name hello.sh &
#使用find命令在/root目录下査找hello.sh文件
#符号"&"的意思是把命令放入后台执行
echo "The last one Daemon process is $!"
#输出这个后台执行命令的进程的PID,也就是输出find命令的PID
[root@localhost sh]# chmod 755 variable.sh
#赋予执行权限
[root@localhost sh]#./variable.sh
The current process is 26970
#脚本variable.s执行时,PID是26970
The last one Daemon process is 26971
#find命令执行时,PID是26971
一般情况下使用"$?"变量来判断上一条命令是否正确执行,我们后面要讲的test测试命令也是通过"$?"变量来判断上一条命令是否正确执行的。使用"$$"变量来给临时文件命名,以保证临时文件名不会重复。