shell第九講
1、特殊變量
我們之前給大家講過(guò)幾個(gè)特殊變量了,比如 $0 $1 這些位置變量,還有命令執(zhí)行狀態(tài)判斷符$?。這些在工作中都是比較常用的,初次之外,再給大家分享幾個(gè)工作中偶爾會(huì)用到的。
1.1、位置參數(shù)總數(shù)
這個(gè)主要是用來(lái)打印執(zhí)行的腳本參數(shù)的個(gè)數(shù),比如:bash [root@localhost ~]# cat a.sh!/bin/bashecho $1 $2 $3 $4 $5 echo "本次腳本傳入的參數(shù)個(gè)數(shù)為: $#" [root@localhost ~]# chmod +x a.sh [root@localhost ~]# ./a.sh 11 22 33 44 55 11 22 33 44 55 本次腳本傳入的參數(shù)個(gè)數(shù)為: 5
我們一共傳入了5個(gè)參數(shù),那么此時(shí) $# 返回給我們的參數(shù)個(gè)數(shù)也是5。
1.2、$@與$*
兩者使用上基本是一樣的效果,都是表示引用傳遞給腳本的所有參數(shù)(所有的位置參數(shù)被看做是一個(gè)字符串)。比如:bash [root@localhost ~]# cat a.sh!/bin/bashecho $1 $2 $3 $4 $5 echo "本次腳本傳入的參數(shù): $*" echo "本次腳本傳入的參數(shù): $@" [root@localhost ~]# ./a.sh 11 22 33 44 55 11 22 33 44 55 本次腳本傳入的參數(shù): 11 22 33 44 55 本次腳本傳入的參數(shù): 11 22 33 44 55
可以看出來(lái)兩個(gè)特殊變量效果是一樣的,他會(huì)把我們的所有位置參數(shù)被看成是一個(gè)字符串然后打印出來(lái)。
然而在實(shí)際工作中,我們往往使用for循環(huán)來(lái)遍歷每一個(gè)位置參數(shù),那么有些人習(xí)慣加上給特殊變量加上雙引號(hào),那么此時(shí)在使用上就會(huì)有些區(qū)別:bash [root@localhost ~]# cat a.sh!/bin/bashecho "這個(gè)是\$的使用方法" for i in "$"; do echo ${i} done echo "下面是\$@的使用方法" for i in "$@"; do echo ${i} done [root@localhost ~]# ./a.sh 11 22 33 這個(gè)是$*的使用方法 11 22 33 下面是$@的使用方法 11 22 33 [root@localhost ~]#
看到效果了嗎?
可以看到當(dāng)兩個(gè)特殊變量加了雙引號(hào)后,此時(shí)$*把參數(shù)作為一個(gè)字符串整體(單字符串)返回,而$@把每個(gè)參數(shù)作為一個(gè)字符串返回。
上面就是兩者的使用區(qū)別,大家在使用的過(guò)程中多加注意。
1.3、$$使用
這個(gè)我們?cè)谥暗闹R(shí)中都給大家分享過(guò)了,他表示打印當(dāng)前進(jìn)程的PID號(hào),
我們當(dāng)前都是在shell交互界面來(lái)執(zhí)行命令的,這個(gè)shell交互我們也稱之為在bash進(jìn)程上,那么我們查看一下當(dāng)前bash進(jìn)程的PID號(hào),比如:
bash [root@localhost ~]# ps aux | grep -e pts/0 | grep -v grep | grep bash root 1505 0.0 0.0 115580 2236 pts/0 Ss Mar23 0:00 -bash
從上面第二列我們看到的是bash進(jìn)程的PID號(hào)是1505,現(xiàn)在我們使用$$來(lái)打印看看
bash [root@localhost ~]# echo $$ 1505
此時(shí)$$就可以打印出來(lái)當(dāng)前進(jìn)程的PID號(hào),可以看到也是1505。
1.4、$!使用
$!表示打印出來(lái)上一條命令運(yùn)行在后臺(tái)進(jìn)程的PID號(hào)。比如:
bash [root@localhost ~]# sleep 10 & [2] 3730 [root@localhost ~]# echo $! 3730
我們使用sleep命令發(fā)起一個(gè)睡眠10秒的進(jìn)程并放在后臺(tái)運(yùn)行,此時(shí)使用$!就可以看到我們上一條命令的后臺(tái)進(jìn)程PID號(hào)是3730。(當(dāng)然,在命令結(jié)尾處放一個(gè)&符號(hào),表示把命令放在當(dāng)前終端的后臺(tái)運(yùn)行,同時(shí)也會(huì)打印出來(lái)此后臺(tái)進(jìn)程的PID號(hào))