shell的特殊重要內建變數
阿新 • • 發佈:2019-02-05
《1》位置變數
$0 獲取當前執行的shell指令碼的檔名,如果執行指令碼帶路徑,那麼就包括指令碼路徑。
$n 獲取當前執行shell的命令列的第n個引數,當n=0時表示指令碼的檔名,如果n>9,用{}將其括起來,引數以空格隔開。
$# 獲取當前執行的shell指令碼後面接的引數的總個數。
[root@localhost SHELL]# vim test.sh
[root@localhost SHELL]# sh test.sh "how are you" hello
how are you hello 2 test.sh
[root@localhost SHELL]# cat test.sh
echo $1 $2 $# $0
[root@localhost SHELL]#
///////////////////加引號與否
[root@localhost SHELL]# vim test.sh
[root@localhost SHELL]# sh test.sh how are you
how are
[root@localhost SHELL]# sh test.sh "how are you" hello
how are you hello
[root@localhost SHELL]# cat test.sh
echo $1 $2
$*
$@$
@ 與 $* 的區別:
$* 將命令列的所有引數視為一個單獨的字串,等同於”$1$2$3”,”$*”$@ 將命令列的每個引數視為單獨的字串,等同於”$1”, “$2”, “$3”.
dirname 與 basename
dirname 獲取檔案的路徑名
basename 獲取檔案的名稱
[root@localhost SHELL]# dirname /root/Desktop/SHELL/test.sh
/root/Desktop/SHELL
[root@localhost SHELL]# basename /root/Desktop/SHELL/test.sh
test.sh
[root@localhost SHELL]#
$0的使用驗證:
《2》程序狀態變數
$? 獲取執行上一個指令的返回值(0表示成功,非0表示失敗)
[root@localhost SHELL]# echo $?
0
[root@localhost SHELL]# sh test1.sh
ni hao, ming tian
[root@localhost SHELL]# echo $?
0
[root@localhost SHELL]# cat test1.sh
echo 'ni hao, ming tian'
[root@localhost SHELL]#
$? 的返回值的意義:
0 執行成功
2 許可權不夠
1~125 執行失敗
126 找到該命令了,但是無法執行
127 未找到要執行的命令
大於128 命令被系統強制中斷
提示: 在指令碼中一般用 exit 數字,在執行指令碼後,返回返回值給$?;;;; 在函式裡用return 數字 返回返回值給$?
$! 獲取執行上一個指令的PID
$$ 獲取當前shell的程序號(PID)
[root@localhost SHELL]# sh test1.sh
ni hao, ming tian
[root@localhost SHELL]# echo $$
5964
[root@localhost SHELL]# cat test1.sh
echo 'ni hao, ming tian'
[root@localhost SHELL]#
/////////////////
[root@localhost SHELL]# vim test.sh
[root@localhost SHELL]# sh test.sh &
[2] 7733
[root@localhost SHELL]# cat /tmp/a.pid
7733
[root@localhost SHELL]# cat test.sh
echo $$ >/tmp/a.pid
sleep 200
[root@localhost SHELL]#
$_ 獲取在此之前執行的命令或指令碼的最後一個引數
[root@localhost SHELL]# ls ./
test1.sh test.sh UNIX.shell範例精解(第4版).pdf
[root@localhost SHELL]# echo $_
./
[root@localhost SHELL]#
//////////////////
[root@localhost SHELL]# cat test.sh
echo $1 $2 $# $0
[root@localhost SHELL]# echo $_
test.sh
[root@localhost SHELL]# sh test.sh hello world
hello world 2 test.sh
[root@localhost SHELL]# echo $_
world
[root@localhost SHELL]#