shell-的特殊變量-進程狀態變量$$ $! $? $_詳解


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

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM