一:shell的特殊变量-进程状态变量详解
1. 进程状态变量
$$ 获取当前shell的进程号(pid) $! 执行上一个指令的pid,上一个后台运行进程的进程号 $? 获取执行上一个指令的返回值(0为成功,非零为失败) $_ 在此之前执行的命令(上一个命令)或脚本的最后一个参数
举例(通过脚本举例,)
范例:举例$$
范例1:举例$$ [root@1-241 scripts]# echo $$ 76037 [root@1-241 scripts]# ps -ef |grep 76037 root 76037 76035 0 05:26 pts/1 00:00:00 -bash 范例2:举例$$ [root@1-241 scripts]# cat 2.sh echo $$ >/scripts/a.log while true do uptime sleep 2 done [root@1-241 scripts]# cat a.log 76918 [root@1-241 scripts]# ps 76918 PID TTY STAT TIME COMMAND 76918 pts/1 S+ 0:00 sh 2.sh
范例1:举例$?
[root@1-241 scripts]# jjklk -bash: jjklk: command not found [root@1-241 scripts]# echo $? 127 [root@1-241 scripts]# echo $? 0 提示: $?:相当有用,是判断上一个命令是否执行成功
2. $?返回值参考
0 表示运行成功 2 权限拒绝 1~125 表示运行失败,脚本命令、系统命令错误或参数传递错误 126 找到该命令了,但是无法执行 127 未找到要运行的命令 >128 命令被系统强制结束 提示: 在脚本调用,一般用exit 0,函数retrun 0。
3. 举例(通过脚本举例,大家也可以一行行执行测试):
[root@1-241 scripts]# cat all.sh echo '$0 获取当前执行的shell脚本的文件名:' $0 echo '$n 获取当前执行的shell脚本的第n个参数值,n=1..9:' '$1'=$1 '$2'=$2 "$3=$3" echo '$* 获取当前shell的所有参数 , $1 $2 $3 ....注意与$#的区别:' $* echo '$# 获取当前shell命令行中参数的总个数:' $# echo '$$ 获取当前的shell的进程号(PID):' $$ sleep 2 & echo '$! 执行上一个指令的PID:' $! echo '$? 获取执行的上一个指令的返回值:' $? echo '$@ 这个程序的所有参数 “$1” "$2" "$3" "...":' $@ echo '$_ 在此之前执行的命令或脚本的最后一个参数:' $_
执行结果:
$0 获取当前执行的shell脚本的文件名: all.sh $n 获取当前执行的shell脚本的第n个参数值,n=1..9: $1=aa $2=bb $3=cc $* 获取当前shell的所有参数 , $1 $2 $3 ....注意与$#的区别: aa bb cc $# 获取当前shell命令行中参数的总个数: 3 $$ 获取当前的shell的进程号(PID): 77147 $! 执行上一个指令的PID: 77148 $? 获取执行的上一个指令的返回值: 0 $@ 这个程序的所有参数 “$1” "$2" "$3" "...": aa bb cc $_ 在此之前执行的命令或脚本的最后一个参数: cc