《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]#