久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

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
大家看到效果了嗎?這就是使用[[ ]]的好處。

聲明:文章來源于網絡,如有侵權請聯系刪除!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 广安市| 广平县| 长葛市| 霍城县| 九龙城区| 武夷山市| 霍林郭勒市| 河南省| 郁南县| 望奎县| 肃宁县| 云梦县| 黄冈市| 延边| 长泰县| 青铜峡市| 安乡县| 班玛县| 曲沃县| 凤凰县| 甘洛县| 崇州市| 营山县| 诸城市| 正阳县| 广宁县| 独山县| 威海市| 响水县| 大名县| 遂溪县| 馆陶县| 梅州市| 乌审旗| 松滋市| 苍溪县| 福泉市| 福贡县| 剑河县| 花垣县| 冕宁县|