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