shell學習集合-shell第十三講
歡迎同學們來到馬哥教育官網,今天和大家分享的文章是shell學習集合中的shell第十三講的內容,我們一起來學習一下吧!
1、shell字符串比較符
1.1、==
==?可用于判斷變量是否相等,我們在此前的課程當中也都給大家講過,字符串的比較建議使用[[ ]],因為我們直接對字符串本身做比較的話,我們會習慣上對字符串加上雙引號,比如:
bash [root@master1 ~]#[[ "you are a pig" == "you are a pig" ]] [root@master1 ~]#echo $? 0
兩個字符串是一模一樣的,比較上也是沒有問題的。但是我們在工作中往往不是這么使用的,我們會將字符串賦值給一個變量,然后拿這個變量去跟目標字符串做比較,這時候重點就來了,往往匹配上出現問題,比如會報這樣的錯誤:test.sh: 第 4 行:[: 參數太多。這種錯誤就讓我們很抓狂,我們明明寫的是沒有錯誤的,但是卻不知道如何去排查 ‘’參數太多“ 這種問題。
所以這就是給大家強調的在進行字符串比較時最好使用[[ ]],比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[[ $NAME == "you are a pig" ]] [root@master1 ~]#echo $? 0
大家都看明白了嗎?我們在引用變量$NAME,以這樣的方式跟字符串做相等比較,最好使用[[ ]]
當然如果你非要使用[ ],那么引用變量 $NAME本身一定要加上雙引號,即[ "$NAME" == "you are a pig" ],如果你就是不加雙引號,否則就報test.sh: 第 4 行:[: 參數太多這樣的錯誤直接懵逼了,
1.2、=
=本身我只是用做賦值操作,建議大家不要去用=來做字符串比較,因為比較詭異,而且Linux人大多數也都使用==來做比較,因此使用=本身做比較的同學,我個人建議還是改變自己的操作,再說我們都使用==做比較了,再花心思研究=做字符串比較操作是沒有必要的,還浪費精力。
1.3、!=
!=表示不等于,與==正好是相反,在shell腳本中我們也經常使用它做一些字符串比較的操作。比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[[ $NAME != "you are a cat" ]] [root@master1 ~]#echo $? 0
兩個字符串確實是不相等的,條件為真,返回值為0。
1.4、-n與-z
-n和-z都是用來判斷字符串是否空的,不過兩者也是有區別的,如下所示:
| -n | 當字符串長度不為0時條件為真,字符串長度為0時條件為假。 | | ------ | ------------------------------------------------------------ | |?-z?|?當字符串長度不為0時條件為假,字符串長度為0時條件為真。?|
可以看出來-n與-z兩個功能正好相反,比如:
bash [root@master1 ~]#NAME="" [root@master1 ~]#[ -n "$NAME" ] [root@master1 ~]#echo $? 1 [root@master1 ~]#[ -z "$NAME" ] [root@master1 ~]#echo $? 0
我們現在賦值NAME變量值的長度為0,然后分別使用-n和-z來測試,發現符合我們的預期,NAME變量確實長度為0,?-z判斷長度為0,條件為真,返回值為0。
現在我們測試一個字符串變量長度不為0的情況,我們給NAME變量賦個字符串值,比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[ -z "$NAME" ] [root@master1 ~]#echo $? 1 [root@master1 ~]#[ -n "$NAME" ] [root@master1 ~]#echo $? 0
同樣的,現在NAME變量有字符串值,此時-z發現字符串長度不為0,條件為假,返回值為1。
當然大家發現了上面的引用變量本身需要加上雙引號,很多人還是不習慣加的,那么此時你會得不到想要的結果,此時在判斷上是有錯誤的,不信你可以試試看。當然也可以解決,就是使用[[ ]]來解決,比如:
bash [root@master1 ~]#NAME="you are a pig" [root@master1 ~]#[[ -z $NAME ]] [root@master1 ~]#echo $? 1 [root@master1 ~]#NAME="" [root@master1 ~]#[[ -z $NAME ]] [root@master1 ~]#echo $? 0
大家看到效果了嗎?這就是使用[[ ]]的好處。
聲明:文章來源于網絡,如有侵權請聯系刪除!