亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

詳解shell腳本[] [[]] -n -z 的含義解析

2020-07-26 23:25:16
字體:
來源:轉載
供稿:網友

在寫腳本的時候,總是搞不懂[] [[]]的區別,這次寫一個總結,把它掌握牢固

[]和test

兩者是一樣的,在命令行里test expr和[ expr ]的效果相同。

test的三個基本作用是判斷文件、判斷字符串、判斷整數。支持使用 ”與或非“ 將表達式連接起來。

test中可用的比較運算符只有==和!=,兩者都是用于字符串比較的,不可用于整數比較,整數比較只能使用-eq, -gt這種形式。

無論是字符串比較還是整數比較都千萬不要使用大于號小于號。當然,如果你實在想用也是可以的,對于字符串比較可以使用尖括號的轉義形式, 如果比較"ab"和"bc":[ ab /< bc ],結果為真,也就是返回狀態為0.

[[ ]]
這是內置在shell中的一個命令,它就比剛才說的test強大的多了。支持字符串的模式匹配(使用=~操作符時甚至支持shell的正則表達 式)。邏輯組合可以不使用test的-a,-o而使用&& ||。
字符串比較時可以把右邊的作為一個模式(這是右邊的字符串不加雙引號的情況下。如果右邊的字符串加了雙引號,則認為是一個文本字符串。),而不僅僅是一個字符串,比如[[ hello == hell? ]],結果為真。

  注意:使用[]和[[]]的時候不要吝嗇空格,每一項兩邊都要有空格,[[ 1 == 2 ]]的結果為“假”,但[[ 1==2 ]]的結果為“真”!

1. 首先,盡管很相似,但是從概念上講,二者是不同層次的東西。
"[[",是關鍵字,許多shell(如ash bsh)并不支持這種方式。ksh, bash(據說從2.02起引入對[[的支持)等支持。
"["是一條命令, 與test等價,大多數shell都支持。在現代的大多數sh實現中,"["與"test"是內部(builtin)命令,換句話說執行"test"/"["時不會調用/some/path/to/test這樣的外部命令(如果有這樣的命令的話)。

2.[[]]結構比Bash版本的[]更通用。在[[和]]之間的所有的字符都不會被文件擴展或是標記分割,但是會有參數引用和命令替換。

用[[ ... ]]測試結構比用[ ... ]更能防止腳本里的許多邏輯錯誤。比如說,&&,||,<和>操作符能在一個[[]]測試里通過,但在[]結構會發生錯誤。

3.(( ))結構擴展并計算一個算術表達式的值。如果表達式值為0,會返回1或假作為退出狀態碼。一個非零值的表達式返回一個0或真作為退出狀態碼。這個結構和先前test命令及[]結構的討論剛好相反。

4.[ ... ]為shell命令,所以在其中的表達式應是它的命令行參數,所以串比較操作符">" 與"<"必須轉義,否則就變成IO改向操作符了(請參看上面2中的例子)。在[[中"<"與">"不需轉義;
由于"[["是關鍵字,不會做命令行擴展,因而相對的語法就稍嚴格些。例如
在[ ... ]中可以用引號括起操作符,因為在做命令行擴展時會去掉這些引號,而在[[ ... ]]則不允許這樣做。

5.[[ ... ]]進行算術擴展,而[ ... ]不做

6.[[ ... && ... && ... ]] 和 [ ... -a ... -a ...] 不一樣,[[ ]] 是邏輯短路操作,而 [ ] 不會進行邏輯短路

應用場景分析:

1、在中括號中,判斷變量的值, 加不加雙引號的問題?

-z 判斷 變量的值,是否為空; zero = 0

  - 變量的值,為空,返回0,為true
  - 變量的值,非空,返回1,為false

-n 判斷變量的值,是否為空   name = 名字
  - 變量的值,為空,返回1,為false
  - 變量的值,非空,返回0,為true
pid="123"
    [ -z "$pid" ]  單對中括號變量必須要加雙引號
   [[ -z $pid ]]   雙對括號,變量不用加雙引號

   [ -n "$pid" ]  單對中括號,變量必須要加雙引號
   [[ -z  $pid ]]  雙對中括號,變量不用加雙引號

2、多個條件判斷,[] 和 [[]] 的區別?

2.1:[[ ]] 雙對中括號,是不能使用 -a 或者 -o的參數進行比較的;

&& 并且 || 或 -a 并且 -o 或者

[[ ]] 條件判斷 && 并且 || 或

[[ 5 -lt 3 || 3 -gt 6 ]] 一個條件,滿足,就成立 或者的關系
[[ 5 -lt 3 || 3 -gt 6 ]] 一個條件滿足,就成立 或者的關系

[[ 5 -lt 3 ]] || [[3 -gt 6 ]]
[[ 5 -lt 3 ]] || [[3 -gt 6 ]] 寫在外面也可以

&& 必須兩個條件同時滿足,和上述一樣,這里想說明的問題的是:

[[ 5 -lt 3]] -o [[ 3 -gt 6 ]] [[ 5 -lt 3 -o 3 -gt 6 ]]
[[ 5 -lt 3 -a 3 -gt 6 ]] [[ 5 -lt 3 -a 3 -gt 6 ]]
-a 和 -o就不成立了,是因為,[[]] 雙對中括號,不能使用 -o和 -a的參數

直接報錯:


2.2 [ ] 可以使用 -a -o的參數,但是必須在 [ ] 中括號內,判斷條件,例如:

[ 5 -lt 3 -o 3 -gt 2 ] 或者條件成立
[5 -lt 3 ] -o [ 3 -gt 2] 或者條件, 這個不成立,因為必須在中括號內判斷

如果想在中括號外判斷兩個條件,必須用&& 和 || 比較
[5 -lt 3 ] || [ 3 -gt 2]
[5 -gt 3 ] && [ 3 -gt 2] 成立

相對的,|| 和 && 不能在中括號內使用,只能在中括號外使用

3、當判斷某個變量的值是否滿足正則表達式的時候,必須使用[[ ]] 雙對中括號


單對中括號,直接報錯:


到此這篇關于詳解shell腳本[] [[]] -n -z 的含義解析的文章就介紹到這了,更多相關shell [] [[]] -n -z 內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区中文字幕| 色在人av网站天堂精品| 久久久久久久国产精品| 国产午夜精品全部视频在线播放| 国产精品一区二区在线| 欧美一级在线亚洲天堂| 日韩精品在线观看一区二区| 18性欧美xxxⅹ性满足| 成人免费观看49www在线观看| 欧美日韩国产限制| 在线性视频日韩欧美| www国产91| 日韩午夜在线视频| 亚洲欧美日韩中文在线| 日韩精品中文在线观看| 庆余年2免费日韩剧观看大牛| 4p变态网欧美系列| 国产精品极品在线| 这里只有精品丝袜| 一区二区三区视频观看| 欧美性猛交xxxx富婆弯腰| 日韩欧美中文免费| 午夜精品一区二区三区在线播放| 96pao国产成视频永久免费| 国产区亚洲区欧美区| 亚洲精品欧美日韩| 在线观看国产欧美| 久久影视电视剧免费网站清宫辞电视| 精品国产一区二区三区久久久狼| 久久全球大尺度高清视频| 欧美性少妇18aaaa视频| 国产日韩欧美成人| 亚洲视频在线免费观看| 欧美精品国产精品日韩精品| 2019中文在线观看| 国产日韩在线视频| 俺去了亚洲欧美日韩| 日韩在线播放一区| 欧美激情亚洲综合一区| 亚洲欧美在线一区| 久久综合伊人77777蜜臀| 国产国语刺激对白av不卡| 亚洲最新在线视频| 国产伦精品免费视频| 91国产中文字幕| 欧美激情亚洲激情| 成人福利视频在线观看| 国产精品视频久| 久久久噜噜噜久久中文字免| 精品视频一区在线视频| 欧美最猛性xxxxx亚洲精品| 国产精品va在线播放| 精品国产精品三级精品av网址| 成人性生交大片免费看视频直播| 欧美巨大黑人极品精男| 欧美成人一二三| 成人激情视频在线观看| 午夜欧美不卡精品aaaaa| 国产国产精品人在线视| 欧美性高潮在线| 91久久久亚洲精品| 欧美成人精品xxx| 欧美华人在线视频| 国产精品中文久久久久久久| 国产美女精品免费电影| 国产一区二区丝袜| 日韩在线国产精品| 激情亚洲一区二区三区四区| 成人美女免费网站视频| 亚洲欧美国产日韩中文字幕| 97在线视频免费播放| 欧美黑人性生活视频| 日韩精品丝袜在线| 成人国内精品久久久久一区| 亚洲视频自拍偷拍| 国产午夜精品免费一区二区三区| 亚洲欧洲美洲在线综合| 亚洲欧美国产日韩天堂区| 国产精品久久久久久久9999| 国产精品网站入口| 久久精品美女视频网站| 午夜精品www| 国产一区视频在线| 国产精品日韩在线一区| 最近2019年好看中文字幕视频| 日韩精品亚洲精品| 性欧美xxxx| 色综合色综合久久综合频道88| 亚洲有声小说3d| 亚洲国产精品99久久| 亚洲午夜性刺激影院| 日韩最新中文字幕电影免费看| 欧美怡红院视频一区二区三区| 亚洲成年网站在线观看| 国产一区在线播放| 奇米四色中文综合久久| 萌白酱国产一区二区| 欧美xxxx18国产| 日韩av大片在线| 国产精品吊钟奶在线| 91av福利视频| 久久久女女女女999久久| 亚洲中国色老太| 日韩一区二区精品视频| 日韩欧美成人免费视频| 久色乳综合思思在线视频| 97在线免费视频| 国产精品美女www| 亚洲欧美在线第一页| 亚洲free性xxxx护士白浆| 欧美三级欧美成人高清www| 久久国产精彩视频| 激情久久av一区av二区av三区| 国产精品99久久久久久久久久久久| 久久深夜福利免费观看| 亚洲乱亚洲乱妇无码| 成人国内精品久久久久一区| 日韩在线视频观看| 亚洲女人天堂视频| 欧美一级片久久久久久久| 欧美夫妻性生活视频| 成人性生交大片免费观看嘿嘿视频| 日韩欧美a级成人黄色| 亚洲a级在线观看| 日韩在线视频观看| 精品一区二区三区四区在线| 中文字幕日韩精品有码视频| 日韩在线欧美在线国产在线| 欧美与黑人午夜性猛交久久久| 美女精品视频一区| 在线视频亚洲欧美| 国产精品美女久久久久av超清| 精品亚洲夜色av98在线观看| 日韩欧美在线网址| 在线日韩欧美视频| 日韩中文字幕精品视频| 欧美大片va欧美在线播放| 伊人激情综合网| 国产精品久久在线观看| 国产精品久久网| 欧美激情图片区| 日本老师69xxx| 久久久久九九九九| 精品美女永久免费视频| 亚洲美女视频网站| 日韩精品高清在线| 成人国产精品一区| 亚洲在线免费观看| 亚洲人成欧美中文字幕| 97香蕉超级碰碰久久免费软件| 亚洲最大的成人网| 国产精欧美一区二区三区| 日韩在线观看免费高清| 亚洲精品少妇网址| 亚洲精品xxxx| 日本免费久久高清视频| 91成人在线播放| 国产日韩一区在线| 日韩美女激情视频| 亚洲天堂av综合网| 亚洲电影成人av99爱色| 最近2019年手机中文字幕| 亚洲一区二区三区xxx视频| 久久久久国色av免费观看性色|