最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年05月09日 10:35:26   作者:李常明  
這篇文章主要介紹了詳解shell腳本[] [[]] -n -z 的含義解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

[]和test

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

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

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

無論是字符串比較還是整數(shù)比較都千萬不要使用大于號小于號。當(dāng)然,如果你實在想用也是可以的,對于字符串比較可以使用尖括號的轉(zhuǎn)義形式, 如果比較"ab"和"bc":[ ab \< bc ],結(jié)果為真,也就是返回狀態(tài)為0.

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

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

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

2.[[]]結(jié)構(gòu)比Bash版本的[]更通用。在[[和]]之間的所有的字符都不會被文件擴展或是標(biāo)記分割,但是會有參數(shù)引用和命令替換。

用[[ ... ]]測試結(jié)構(gòu)比用[ ... ]更能防止腳本里的許多邏輯錯誤。比如說,&&,||,<和>操作符能在一個[[]]測試?yán)锿ㄟ^,但在[]結(jié)構(gòu)會發(fā)生錯誤。

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

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

5.[[ ... ]]進行算術(shù)擴展,而[ ... ]不做

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

應(yīng)用場景分析:

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、多個條件判斷,[] 和 [[]] 的區(qū)別?

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

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

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

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

[[ 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的參數(shù)

直接報錯:


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

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

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

相對的,|| 和 && 不能在中括號內(nèi)使用,只能在中括號外使用

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


單對中括號,直接報錯:


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

您可能感興趣的文章:

相關(guān)文章

  • crontab設(shè)置每分鐘、每小時、每天、每周、每月、每年定時執(zhí)行的腳本

    crontab設(shè)置每分鐘、每小時、每天、每周、每月、每年定時執(zhí)行的腳本

    這篇文章主要介紹了crontab設(shè)置每分鐘、每小時、每天、每周、每月、每年定時執(zhí)行,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Linux batch命令詳解(在系統(tǒng)不繁忙的時候執(zhí)行定時任務(wù))

    Linux batch命令詳解(在系統(tǒng)不繁忙的時候執(zhí)行定時任務(wù))

    batch命令 用于在指定時間,當(dāng)系統(tǒng)不繁忙時執(zhí)行任務(wù),用法與at相似,這篇文章主要介紹了Linux batch命令(在系統(tǒng)不繁忙的時候執(zhí)行定時任務(wù)),需要的朋友可以參考下
    2024-02-02
  • 一個監(jiān)控網(wǎng)卡流量的shell腳本

    一個監(jiān)控網(wǎng)卡流量的shell腳本

    這篇文章主要為大家分享一個簡單的監(jiān)控流量腳本,需要的朋友可以參考下
    2016-08-08
  • Linux定義變量腳本分享

    Linux定義變量腳本分享

    這篇文章主要為大家詳細介紹了Linux定義變量的腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 探究正常運行的shell腳本為啥有時會報錯

    探究正常運行的shell腳本為啥有時會報錯

    正常運行的shell腳本為啥有時會報錯呢,這篇文章主要就是來和大家探索一下報錯的原因以及解決方法,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08
  • 用git打更新包的辦法分享

    用git打更新包的辦法分享

    Git是一款免費、開源的分布式版本控制系統(tǒng),想信很多人也用過或者接觸過,這篇文章為大家介紹下如何利用git來打更新包,有需要的可以參考借鑒。
    2016-08-08
  • Shell腳本解壓rpm軟件包

    Shell腳本解壓rpm軟件包

    這篇文章主要介紹了Shell腳本解壓rpm軟件包,用來解壓后提取某個包中文件,需要的朋友可以參考下
    2014-06-06
  • linux中systemctl詳細理解及常用命令解析

    linux中systemctl詳細理解及常用命令解析

    systemd是Linux系統(tǒng)最新的初始化系統(tǒng)(init),作用是提高系統(tǒng)的啟動速度,盡可能啟動較少的進程,盡可能更多進程并發(fā)啟動,本文給大家介紹linux中systemctl詳細理解及常用命令,感興趣的朋友一起看看吧
    2025-04-04
  • linux自動清理日志腳本分享

    linux自動清理日志腳本分享

    這篇文章主要介紹了linux自動清理日志腳本,主要功能是清理所有目錄的日志,根據(jù)給定日志目錄,刪除時間 結(jié)合crontab進行清理日志
    2014-01-01
  • Linux使用nohup命令在后臺運行腳本

    Linux使用nohup命令在后臺運行腳本

    在?Linux?或類?Unix?系統(tǒng)中,后臺運行腳本是一項非常實用的技能,尤其適用于需要長時間運行的任務(wù)或服務(wù),本文我們來看看如何使用nohup命令在后臺運行腳本吧
    2025-01-01

最新評論

珲春市| 徐水县| 马龙县| 吉木萨尔县| 博客| 龙游县| 晋州市| 万州区| 壤塘县| 阳高县| 增城市| 曲水县| 怀化市| 屯留县| 合山市| 九寨沟县| 宁武县| 高青县| 钦州市| 尼木县| 昌江| 洛扎县| 龙胜| 宜川县| 伊春市| 海城市| 襄垣县| 峨眉山市| 台山市| 息烽县| 麻栗坡县| 明星| 开化县| 赤水市| 斗六市| 水城县| 汉中市| 定边县| 灵武市| 沙河市| 额尔古纳市|