一: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