一、位置變量
(1)$0 ==>取文件名
[root@thzzc1994 ~]# cat test.sh
echo $0
[root@thzzc1994 ~]# sh test.sh
test.sh
[root@thzzc1994 ~]# sh ~/test.sh
/root/test.sh
說明:執行腳本時腳本名字前面有路徑則$0輸出路徑。前面有路徑則要輸出路徑。也可用命令dirname和basename取值。
(2)$#和$n
$# ==>取參數的個數
說明:""裏只能算一個變量,這裏設置三個變量先。
[root@thzzc1994 ~]# set -- "I am" ugly oldboy
[root@thzzc1994 ~]# echo $#
3
[root@thzzc1994 ~]# echo $1
I am
[root@thzzc1994 ~]# echo $2
ugly
[root@thzzc1994 ~]# echo $3br/>oldboy
(3)$*與$@的區別
[root@thzzc1994 ~]# echo $
I am ugly oldboy
[root@thzzc1994 ~]# echo $@
I am ugly oldboy
[root@thzzc1994 ~]# for i in "$";do echo $i;done
I am ugly oldboy ==>可知$*就只有一個參數
[root@thzzc1994 ~]# for i in "$@";do echo $i;done
I am
ugly
oldboy ==>$@有四個參數
二、進程狀態變量
(1)$? 0爲成功,非0爲失敗
[root@thzzc1994 ~]# date
2018年 05月 01日 星期二 18:58:42 CST
[root@thzzc1994 ~]# echo $?
0
[root@thzzc1994 ~]# rm /
rm: 沒法刪除"/": 是一個目錄
[root@thzzc1994 ~]# echo $?
1
在企業場景中,$?返回值的用法以下:
①判斷命令、腳本或函數等程序是否執行成功
②在腳本中調用exit n,會返回這個數字給$?。
③在函數裏,經過return n把這個數字以函數返回值給$?。
(2)$$ 獲取進程號
驗證方法①:[root@thzzc1994 ~]# cat testPid.sh
echo $$
[root@thzzc1994 ~]# sh testPid.sh &
[3] 3357
[root@thzzc1994 ~]# 3357shell
[3]+ Done sh testPid.sh
②(推薦):[root@thzzc1994 ~]# su - thzzc
[thzzc@thzzc1994 ~]$ echo $$
2544
[thzzc@thzzc1994 ~]$ kill -9 2544
[root@thzzc1994 ~]#
(3)$ 上個命令的最後一個參數(不止參數,命令也同樣,應該是單詞就行)
[root@thzzc1994 ~]# echo && echo $編程
echo
[root@thzzc1994 ~]# echo kobe && echo $
kobe
kobe
(4)$! 獲取上個腳本的進程號
[root@thzzc1994 ~]# cat testPid.sh
sleep 100
[root@thzzc1994 ~]# ps -ef |grep testPid
root 6557 6311 0 15:48 pts/0 00:00:00 grep testPid
[root@thzzc1994 ~]# sh testPid.sh &
[1] 6558
[root@thzzc1994 ~]# echo $!
6558
總結:位置變量$0 $n $# $* $@ 5個和進程變量$$ $! $? $ 4個,都記下來會對shell編程有很大幫助。ide