shell系列-shell第十一講
今天和大家分享一下shell系列-shell第十一講內(nèi)容!希望對(duì)大家有所幫助!
1、條件表達(dá)式
1.1、[ expression ] 用法
[ expression ]是用來做判斷的字符。比如:
bash [root@master1 ~]#[ 1 -eq 1 ] [root@master1 ~]#echo $? 0
這里的-eq就相當(dāng)于我們數(shù)學(xué)上的等于號(hào),那么我們這里的[ 1 -eq 1 ]表示1是否等于1,我們使用中括號(hào)做一個(gè)判斷,1確實(shí)等于1,此時(shí)條件為真,命令執(zhí)行成功,返回值為0。
或者我們可以使用的高級(jí)一點(diǎn):
bash [root@master1 ~]#[ 1 -eq 1 ] && echo "yes,1 確實(shí)等于1" || echo "no ,兩者不相等" yes,1 確實(shí)等于1 [root@master1 ~]#[ 1 -eq 2 ] && echo "yes,1 確實(shí)等于1" || echo "no ,兩者不相等" no ,兩者不相等
1.2、[[ expression ]]用法
兩個(gè)雙括號(hào)是我們的bash shell的內(nèi)置功能,一般情況下[ ]和[[ ]]用法是一樣的,比如:
bash [root@master1 ~]#[[ 1 -eq 1 ]] && echo "yes,1 確實(shí)等于1" || echo "no ,兩者不相等" yes,1 確實(shí)等于1
都可以來做判斷。大多數(shù)情況下都是一樣的效果。不過兩者也有一些區(qū)別。
2、[ ]和[[ ]]的區(qū)別
其實(shí)很多人對(duì)這兩種用法上都會(huì)感到很大的疑惑,不知道什么時(shí)候用哪個(gè),在此我總結(jié)了一下,bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [ "$NAME" == "aaa bbb" ] then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等
寫一個(gè)shell腳本,然后使用[ ]來進(jìn)行比對(duì)。然后發(fā)現(xiàn)兩者是相等的。沒有問題。
現(xiàn)在我們使用[[ ]]來試試。bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [[ "$NAME" == "aaa bbb" ]] # 注意我這里改成了兩個(gè)括號(hào) then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等 [root@master1 ~]#
使用[[ ]]發(fā)現(xiàn)同樣的結(jié)果,沒有區(qū)別。
現(xiàn)在我們對(duì)引用的變量不加雙引號(hào),且使用單括號(hào)看看。bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [ $NAME == "aaa bbb" ] # 這里發(fā)生了改變,沒有引號(hào),且為單括號(hào) then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh a.sh: 第 4 行:[: 參數(shù)太多 no, 不相等
直接報(bào)了一個(gè)錯(cuò)誤給我們,然后還返回的是錯(cuò)誤的結(jié)果,兩個(gè)字符串明明是一樣的??磥碓趩卫ㄌ?hào)情況下必須加上雙引號(hào)才行。
然后我們現(xiàn)在不加雙引號(hào),且使用雙括號(hào)來看看bash [root@master1 ~]#cat a.sh !/bin/bash NAME="aaa bbb" if [[ $NAME == "aaa bbb" ]] then echo "yes. 相等" else echo "no, 不相等" fi [root@master1 ~]#bash a.sh yes. 相等
發(fā)現(xiàn)沒有報(bào)錯(cuò),這就是使用雙括號(hào)的好處,因?yàn)楹芏嗳瞬幌矚g引用變量的時(shí)候還加上雙引號(hào),他們往往只寫引用變量的寫法,這就導(dǎo)致程序經(jīng)常出錯(cuò)的問題。
總結(jié):當(dāng)使用引用變量名這種機(jī)制時(shí),[ ]和[[ ]]是有區(qū)別的,使用[ ]時(shí)需要在變量的外側(cè)加上雙引號(hào),而使用[[ ]]時(shí)則不用這么來寫。
3、test命令檢測(cè)
test命令的功能和[ ]是一模一樣的,在[ ]中需要注意的點(diǎn),在test命令中同樣需要注意。
test的用法是:
bash [root@master1 ~]#test 1 -eq 1 [root@master1 ~]#echo $? 0 [root@master1 ~]#test 1 -eq 2 [root@master1 ~]#echo $? #得出錯(cuò)誤的結(jié)果。 1
聲明:文章來源于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除!