<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在 Bash 腳本中使用強(qiáng)大的 Linux test 命令

          共 4127字,需瀏覽 9分鐘

           ·

          2022-05-23 17:49

          在下方公眾號(hào)后臺(tái)回復(fù):JGNB,可獲取杰哥原創(chuàng)的 PDF 手冊(cè)。

          Linux test 命令是 Shell 內(nèi)置命令,用來(lái)檢測(cè)某個(gè)條件是否成立。test 通常和 if 語(yǔ)句一起使用,并且大部分 if 語(yǔ)句都依賴 test。可以將一個(gè)元素與另一個(gè)元素進(jìn)行比較,但它更常用于BASH shell 腳本中,作為控制邏輯和程序流程 的條件語(yǔ)句的一部分。

          test 命令有很多選項(xiàng),可以進(jìn)行數(shù)值、字符串和文件三個(gè)方面的檢測(cè)。

          一個(gè)基本的例子

          在終端窗口中嘗試這些命令。

          linuxmi@linuxmi?/home/linuxmi/www.linuxmi.com???????????????????????????????????
          ??test?1?-eq?2?&&?echo?"yes"?||?echo?"no"
          no

          linuxmi@linuxmi?/home/linuxmi/www.linuxmi.com???????????????????????????????????
          ??test?1?-eq?1?&&?echo?"yes"?||?echo?"no"
          yes

          上面的命令分解如下:

          • test:執(zhí)行比較的命令

          • 1:您要比較的第一個(gè)元素。在此示例中,它是數(shù)字1,但它可以是任何數(shù)字,也可以是引號(hào)內(nèi)的字符串。

          • eq:比較方法。在本例中,您正在測(cè)試一個(gè)值是否等于另一個(gè)值。

          • 2:您要比較第一個(gè)元素的元素。在這個(gè)例子中,它是數(shù)字2。

          • &&:按順序?qū)⒚铈溄釉谝黄鸬?Linux 快捷方式。測(cè)試鏈的輸出到隨后的命令。當(dāng)前面的命令的退出狀態(tài)為 0 時(shí),將執(zhí)行雙與號(hào),這是表示命令沒(méi)有失敗的一種奇特方式。

          • echo "yes":比較成功時(shí)運(yùn)行的命令。在這種情況下,我們所做的只是要求echo命令將單詞“yes”打印到標(biāo)準(zhǔn)輸出,但是如果測(cè)試結(jié)果證明為真,您可以在此處運(yùn)行任何將執(zhí)行的命令。

          • || : 在某種程度上,與 &&; 正好相反 只有在它前面的命令失敗(退出狀態(tài)不是 0)時(shí),雙管道才會(huì)執(zhí)行。
            echo "no":比較不符時(shí)運(yùn)行的命令。

          小貼士:從 shell 提示符運(yùn)行,test不會(huì)將值返回到標(biāo)準(zhǔn)輸出,它僅返回退出狀態(tài)代碼。這就是為什么需要鏈接 echo 命令的原因。

          本質(zhì)上一樣的,該命令將 1 與 2 進(jìn)行比較,如果它們匹配,則執(zhí)行 echo“yes”語(yǔ)句并顯示“yes”,如果它們不匹配,則執(zhí)行 echo“no”語(yǔ)句,顯示“no”。

          比較數(shù)字

          如果要比較解析為數(shù)字的元素,可以使用以下比較運(yùn)算符:

          • -eq:值 1 等于值 2

          • -ge : 值 1 大于或等于值 2

          • -gt : 值 1 大于值 2

          • -le : 值 1 小于或等于值 2

          • -lt : 值 1 小于值 2

          • -ne : 值 1 不等于值 2

          示例測(cè)試

          test?1?-eq?2?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“no”,因?yàn)?1 不等于 2)

          test?1?-ge?2?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“no”,因?yàn)?1 不大于或等于 2)

          test?1?-gt?2?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“no”,因?yàn)?1 不大于 2)


          test?1?-le?2?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“yes”,因?yàn)?1 小于或等于 2)

          test?1?-lt?2?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“yes”,因?yàn)?1 小于或等于 2)

          test?1?-ne?2?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“yes”,因?yàn)?1 不等于 2)

          比較文本

          比較解析為字符串的元素時(shí),請(qǐng)使用以下比較運(yùn)算符:

          • =:字符串 1 匹配字符串 2

          • != : 字符串 1 與字符串 2 不匹配

          • -n:字符串長(zhǎng)度大于0

          • -z:字符串長(zhǎng)度等于 0

          例子

          test?"string1"?=?"string2"?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“no”,因?yàn)椤皊tring1”不等于“string2”)

          test?"string1"?!=?"string2"?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“yes”,因?yàn)椤皊tring1”不等于“string2”)

          test?-n?"string1"?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“yes”,因?yàn)椤皊tring1”的字符串長(zhǎng)度大于零)

          test?-z?"string1"?&&?echo?"yes"?||?echo?"no"

          (在屏幕上顯示“no”,因?yàn)椤皊tring1”的字符串長(zhǎng)度大于零)

          比較文件

          比較文件時(shí),請(qǐng)使用以下比較運(yùn)算符:

          • -ef:文件具有相同的設(shè)備和 inode 編號(hào)(它們是同一個(gè)文件)

          • -nt : 第一個(gè)文件比第二個(gè)文件新

          • -ot:第一個(gè)文件比第二個(gè)文件舊

          • -b:文件存在并且是塊特殊的

          • -c:文件存在并且是字符特殊的

          • -d:文件存在并且是目錄

          • -e : 文件存在

          • -f : 文件存在并且是普通文件

          • -g:文件存在并具有指定的組號(hào)

          • -G : 文件存在且屬于用戶組

          • -h或-L:文件存在并且是符號(hào)鏈接

          • -k:文件存在并且設(shè)置了粘性位

          • -O : 文件存在你是所有者

          • -p:文件存在并且是命名管道

          • -r:文件存在且可讀

          • -s:文件存在且大小大于零

          • -S : 文件存在并且是一個(gè)socket

          • -t :在終端上打開(kāi)文件描述符

          • -u:文件存在并且設(shè)置了 set-user-id 位

          • -w:文件存在且可寫

          • -x:文件存在且可執(zhí)行

          例子

          ??test?linuxmi?-nt?linux?&&?echo?"yes"


          (如果 linuxmi 比 linux 新,則顯示“yes”字樣,如上圖)

          ??test?-e?/home/linuxmi/linuxmi?&&?echo?"yes"


          (如果 linuxmi 存在,將顯示“yes”)

          test?-O?/home/linuxmi/linuxmi?&&?echo?"yes"


          (如果您擁有 file1,則顯示“yes”字樣”)

          塊特殊:文件是塊設(shè)備,這意味著數(shù)據(jù)以字節(jié)塊的形式讀取。這些通常是設(shè)備文件,例如硬盤驅(qū)動(dòng)器。
          特殊字符:文件在您寫入時(shí)立即執(zhí)行,通常是串行端口等設(shè)備

          比較多個(gè)條件

          到目前為止,一切都在將一件事與另一件事進(jìn)行比較,但是如果您想比較兩個(gè)條件怎么辦?

          例如,如果一只動(dòng)物有四條腿并且會(huì)發(fā)出“哞哞”的聲音,它可能是一頭奶牛。簡(jiǎn)單地檢查四只腿并不能保證你有一頭牛,但檢查它發(fā)出的聲音肯定可以。

          要同時(shí)測(cè)試這兩個(gè)條件,請(qǐng)使用以下語(yǔ)句:

          test?4?-eq?4?-a?"moo"?=?"moo"?&&?echo?"it?is?a?cow"?||?echo?"it?is?not?a?cow"

          這里的關(guān)鍵部分是-a標(biāo)志,它代表and。

          有一種更好和更常用的方法來(lái)執(zhí)行相同的測(cè)試,如下所示:

          test?4?-eq?4?&&?test?"moo"?=?"moo"?&&?echo?"it?is?a?cow"?||?echo?"it?is?not?a?cow"


          test 命令的分支很重要。如果第一個(gè)測(cè)試 (4 = 4) 失敗,則 test 命令以非零退出代碼終止。因此,我們跳轉(zhuǎn)到雙管道符號(hào)并且“it is not a cow”打印到標(biāo)準(zhǔn)輸出。但是,如果第一個(gè)測(cè)試成功并因此 test 導(dǎo)致退出代碼0,那么我們跳轉(zhuǎn)到第一個(gè)雙與號(hào)(&&)。下一條語(yǔ)句是另一個(gè)測(cè)試條件!

          如果第二次 test 失敗,我們?cè)俅翁诫p管并從那里繼續(xù)。然而,如果第二個(gè) test 成功,我們跳轉(zhuǎn)到第二個(gè)雙& 語(yǔ)句,在這個(gè)例子中,它只是將“it is a cow”回顯到標(biāo)準(zhǔn)輸出,然后終止返回到 shell 提示符。

          另一個(gè)測(cè)試比較兩個(gè)語(yǔ)句,如果其中一個(gè)為真,則輸出一個(gè)字符串。例如,要檢查是否存在名為“l(fā)inuxmi.txt”的文件或名為“l(fā)inuxmi.py”的文件,可以使用以下命令:

          這里的關(guān)鍵部分是-o代表or。

          test?-e?linuxmi.txt?-o?-e?linuxmi.py?&&?echo?"linuxmi?exists"?||?echo?"linuxmi?does?not?exist"


          有一種更好和更常用的方法來(lái)執(zhí)行相同的測(cè)試,如下所示:

          test?-e?linuxmi.txt?||?test?-e?linuxmi.py?&&?echo?"linuxmi?exists"?||?echo?"linuxmi?does?not?exist"

          排除 test 關(guān)鍵字

          您實(shí)際上不需要使用單詞test來(lái)執(zhí)行比較。您所要做的就是將語(yǔ)句括在方括號(hào)中,如下所示:

          ??[?-e?linux.py?]?&&?echo?"linux.py?exists"?||?echo?"file1?does?not?exist"
          linux.py?exists

          [and]基本上與test含義 相同。

          現(xiàn)在您知道這一點(diǎn),您可以改進(jìn)比較多個(gè)條件,如下所示:

          [?4?-eq?4?]?&&?[?"moo"?=?"moo"?]?&&?echo?"it?is?a?cow"?||?echo?"it?is?not?a?cow"

          [?-e?linuxmi.py?]?||?[?-e?linuxmi.txt?]?&&?echo?"linuxmi?exists"?||?echo?"linuxmi?does?not?exist"

          總結(jié)

          test 命令在腳本中更有用,因?yàn)槟梢詫?duì)照另一個(gè)變量測(cè)試一個(gè)變量的值并控制程序流程。在命令行上,使用它來(lái)測(cè)試文件是否存在。

          來(lái)自:Linux迷

          鏈接:https://www.linuxmi.com/bash-linux-test-command.html

          推薦閱讀

          如何用 10 行 bash shell 腳本監(jiān)控 Linux?


          如何監(jiān)測(cè) Linux 的磁盤 I/O 性能


          Linux 網(wǎng)絡(luò)延遲故障排查


          Linux 中檢查磁盤空間的 12 個(gè)有用的 df 命令


          Linux 基礎(chǔ)總結(jié),這一篇就夠了!

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色操插 | 午夜剧场污| 免费国产无码电影 | 国产永久性人人视频 | 精品久久久久久久久久久久久 |