shell的特殊重要內置變量

《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]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章