您是否為 Bash shell 中大量的測試和比較選項而困惑呢?這個技巧可以幫助您解密不同類型的文件、算術(shù)和字符串測試,這樣您就能夠知道什么時候使用 test、 [ ]、 [[ ]]、
(( )) 或 if-then-else 了。
Bash shell 在當(dāng)今的許多 Linux? 和 UNIX? 系統(tǒng)上都可使用,是 Linux 上常見的默認(rèn) shell。Bash 包含強大的編程功能,其中包括豐富的可測試文件類型和屬性的函數(shù),以及
在多數(shù)編程語言中可以使用的算術(shù)和字符串比較函數(shù)。理解不同的測試并認(rèn)識到 shell 還能把一些操作符解釋成 shell 元字符,是成為高級 shell 用戶的重要一步。這篇文章摘
自 developerWorks 教程 LPI exam 102 prep: Shells, scripting, programming, and compiling,介紹了如何理解和使用 Bash shell 的測試和比較操作。
這個技巧解釋了 shell 測試和比較函數(shù),演示了如何向 shell 添加編程功能。您可能已經(jīng)看到過使用 && 和 || 操作符的簡單 shell 邏輯,它允許您根據(jù)前一條命令的退出狀態(tài)
(正確退出或伴隨錯誤退出)而執(zhí)行后一條命令。在這個技巧中,將看到如何把這些基本的技術(shù)擴展成更復(fù)雜的 shell 編程。
測試
在任何一種編程語言中,學(xué)習(xí)了如何給變量分配值和傳遞參數(shù)之后,都需要測試這些值和參數(shù)。在 shell 中,測試會設(shè)置返回的狀態(tài),這與其他命令執(zhí)行的功能相同。實際上,
test 是個內(nèi)置命令!
test 和 [
內(nèi)置命令 test 根據(jù)表達(dá)式expr 求值的結(jié)果返回 0(真)或 1(假)。也可以使用方括號:test expr 和 [ expr ] 是等價的。 可以用 $? 檢查返回值;可以使用 && 和 || 操
作返回值;也可以用本技巧后面介紹的各種條件結(jié)構(gòu)測試返回值。
清單 1. 一些簡單測試
[ian@pinguino ~]$ test 3 -gt 4 && echo True || echo false
false
[ian@pinguino ~]$ [ "abc" != "def" ];echo $?
0
[ian@pinguino ~]$ test -d "$HOME" ;echo $?