Bash 測試和比較函式

2021-08-30 06:02:14 字數 2373 閱讀 4148

您是否為 bash shell 中大量的測試和比較選項而困惑呢?這個技巧可以幫助您解密不同型別的檔案、算術和字串測試,這樣您就能夠知道什麼時候使用test[ ][[ ]](( ))if-then-else了。
bash shell 在當今的許多 linux® 和 unix® 系統上都可使用,是 linux 上常見的預設 shell。bash 包含強大的程式設計功能,其中包括豐富的可測試檔案型別和屬性的函式,以及在多數程式語言中可以使用的算術和字串比較函式。理解不同的測試並認識到 shell 還能把一些操作符解釋成 shell 元字元,是成為高階 shell 使用者的重要一步。這篇文章摘自 developerworks 教程 lpi 102 考試準備,主題 109: shell、指令碼、程式設計和編譯

,介紹了如何理解和使用 bash shell 的測試和比較操作。

這個技巧解釋了 shell 測試和比較函式,演示了如何向 shell 新增程式設計功能。您可能已經看到過使用 && 和 || 操作符的簡單 shell 邏輯,它允許您根據前一條命令的退出狀態(正確退出或伴隨錯誤退出)而執行後一條命令。在這個技巧中,將看到如何把這些基本的技術擴充套件成更複雜的 shell 程式設計。

測試在任何一種程式語言中,學習了如何給變數分配值和傳遞引數之後,都需要測試這些值和引數。在 shell 中,測試會設定返回的狀態,這與其他命令執行的功能相同。實際上,test是個內建命令!

test 和 [

內建命令test根據表示式expr 求值的結果返回 0(真)或 1(假)。也可以使用方括號:test  expr和 [ expr ] 是等價的。 可以用$?檢查返回值;可以使用 && 和 || 操作返回值;也可以用本技巧後面介紹的各種條件結構測試返回值。

清單 1. 一些簡單測試

[ian@pinguino ~]$ test 3 -gt 4 && echo true || echo false

false

[ian@pinguino ~]$ [ "abc" != "def" ];echo $?

0[ian@pinguino ~]$ test -d "$home" ;echo $?

0

在清單 1 的第乙個示例中,-gt操作符對兩個字元值之間執行算術比較。在第二個示例中,用[ ]的形式比較兩個字串不相等。在最後乙個示例中,測試 home 變數的值,用單目操作符-d檢查它是不是目錄。

可以用-eq、 -ne-lt、 -le、 -gt或 -ge比較算術值,它們分別表示等於、不等於、小於、小於等於、大於、大於等於。

可以分別用操作符=!=<>比較字串是否相等、不相等或者第乙個字串的排序在第二個字串的前面或後面。單目操作符-z測試 null 字串,如果字串非空-n返回 true(或者根本沒有操作符)。

說明:shell 也用<>操作符進行重定向,所以必須用\<\>加以轉義。清單 2 顯示了字串測試的更多示例。檢查它們是否如您預期的一樣。

清單 2. 一些字串測試

[ian@pinguino ~]$ test "abc" = "def" ;echo $?

1[ian@pinguino ~]$ [ "abc" != "def" ];echo $?

0[ian@pinguino ~]$ [ "abc" \< "def" ];echo $?

0[ian@pinguino ~]$ [ "abc" \> "def" ];echo $?

1[ian@pinguino ~]$ [ "abc" \<"abc" ];echo $?

1[ian@pinguino ~]$ [ "abc" \> "abc" ];echo $?

1

表 1 顯示了一些更常見的檔案測試。如果被測試的檔案存在,而且有指定的特徵,則結果為 true。

表 1. 一些常見的檔案測試

操作符特徵

-d目錄

-e存在(也可以用 -a)

-f普通檔案

bash的測試和比較

比較字串 string1 string2 等價於 string1 string2 比較整數 num1 eq num2 等價於 num1 num2 變數值不為空,且變數值中不包含空格的情況下,變數可不加雙引號,當然加了雙引號也可以 變數值為空或變數值中包含空格的情況下,變數一定要加雙引號 或變數沒有申...

bash 比較運算總結

宣告 本文內容部分有待驗證內建命令,兩者完全等價,可測試的範圍 1.1.算術比較 eq,ne,le,gt等,其中,e equal,n not,l littler,g greater,t than 1.2.字元比較 等,其中,和 意義相同,和 在shll中有特殊含義須轉義 1.3.檔案測試 d ire...

比較bash和perl的比較運算子(糾結)

bash 整數比較 eq 等於,如 if a eq b ne 不等於,如 if a ne b gt 大於,如 if a gt b ge 大於等於,如 if a ge b lt 小於,如 if a lt b le 小於等於,如 if a le b 小於 需要雙括號 如 a b 小於等於 需要雙括號 如...