Shell 腳本的能力時常被低估,但實際上其能力的發揮受制于腳本撰寫者的能力。您了解得越多,您就越能像變戲法似地撰寫一個文件來使任務自動化和簡化您的管理工作。
在 shell 腳本中進行的每一種操作(除最簡單的命令編組之外)都需要檢查條件。所有的 shell 腳本“邏輯” — 廣義意義下的“邏輯” — 通常都可以分為以下三大類:
if {condition exists} then ...while {condition exists} do ...until {condition exists} do ...
無論隨后的操作是什么,這些基于邏輯的命令都依靠判斷一種條件是否真實存在來決定后續的操作。test命令是使得在每一種情況下都能夠確定要判斷的條件是否存在的實用工具。因此,徹底了解這個命令對于撰寫成功的 shell 腳本至關重要。
工作原理
test 命令最短的定義可能是評估一個表達式;如果條件為真,則返回一個 0 值。如果表達式不為真,則返回一個大于 0 的值 — 也可以將其稱為假值。檢查最后所執行命令的狀態的最簡便方法是使用 $? 值。出于演示的目的,本文中的例子全部使用了這個參數。
test命令期望在命令行中找到一個參數,當 shell 沒有為變量賦值時,則將該變量視為空。這意味著在處理腳本時,一旦腳本尋找的參數不存在,則test將報告該錯誤。
當試圖保護腳本時,您可以通過將所有參數包含在雙引號中來解決這個問題。然后 shell 將變量展開,如果變量沒有值,那么將傳遞一個空值給test。另一種方法是在腳本內增加一個額外檢查過程來判斷是否設置了命令行參數。如果沒有設置命令行參數,那么腳本會告訴用戶缺少參數,然后退出。我們會通過一些例子來更具體地說明所有這些內容。
test和[命令
雖然 Linux 和 UNIX 的每個版本中都包含test命令,但該命令有一個更常用的別名 — 左方括號:[。test及其別名通常都可以在 /usr/bin 或 /bin (取決于操作系統版本和供應商)中找到。
當您使用左方括號而非test時,其后必須始終跟著一個空格、要評估的條件、一個空格和右方括號。右方括號不是任何東西的別名,而是表示所需評估參數的結束。條件兩邊的空格是必需的,這表示要調用test,以區別于同樣經常使用方括號的字符/模式匹配操作。
test和[的語法如下:
test expression[ expression ]
在這兩種情況下,test都評估一個表達式,然后返回真或假。如果它和if、while或until命令結合使用,則您可以對程序流進行廣泛的控制。不過,您無需將test命令與任何其它結構一起使用;您可以從命令行直接運行它來檢查幾乎任何東西的狀態。
因為它們彼此互為別名,所以使用test或[均需要一個表達式。表達式一般是文本、數字或文件和目錄屬性的比較,并且可以包含變量、常量和運算符。運算符可以是字符串運算符、整數運算符、文件運算符或布爾運算符 — 我們將在以下各部分依次介紹每一種運算符。
test文件運算符
原文轉自:http://www.anti-gravitydesign.com