Shell 使用 test 命令

Shell 腳本可以使用條件邏輯,使腳本可以根據(jù)參數(shù)醒叁、Shell 變量或是其他條件的值采取不同的行動回窘。test 命令允許你做各種測試并在測試成功或失敗時返回它的退出狀態(tài)碼(為0表示為真冯挎,為1表示為假)泉瞻。使用這個狀態(tài)碼,可以讓 Bash 對測試的結(jié)果做出反應(yīng)五嫂。

test 命令可以用于:

  1. 文件屬性測試颗品;
  2. 字符串測試;
  3. 算術(shù)測試沃缘。

test 命令的語法為:

test EXPRESSION

[ EXPRESSION ]

下面是幾個簡單的示例:


使用示例

上述實例中的第一個是文件屬性的測試躯枢,使用 -d 操作符測試變量 $HOME 的值(當(dāng)前賬號的 HOME 目錄)是否為一個目錄并且此目錄是否存在,此例中的退出狀態(tài)碼為 0槐臀,表示存在此目錄锄蹂。第二個實例是字符串的比較,使用 “!=” 操作符比較兩個字符串是不是不相等水慨,此例中的退出狀態(tài)碼為 0得糜,表示兩個字符串不相等。最后一個實例是算術(shù)比較晰洒,使用 “-gt” 操作符比較第一個數(shù)是否大于第二個數(shù)朝抖,如果大于,則輸出 True谍珊,否則打印 False治宣。

文件屬性測試操作符表###

操作符 描述
-e <FILE> 如果 <FILE> 存在則為真
-f <FILE> 如果 <FILE> 存在且是一個常規(guī)文件則為真
-d <FILE> 如果 <FILE> 存在且是一個目錄則為真
-c <FILE> 如果 <FILE> 存在且是一個特殊字符文件則為真
-b <FILE> 如果 <FILE> 存在且是一個特殊塊文件則為真
-p <FILE> 如果 <FILE> 存在且是一個命名管道則為真
-S <FILE> 如果 <FILE> 存在且是一個套接字文件則為真
-L <FILE> 如果 <FILE> 存在且是一個符號鏈接則為真(與 -h 相同)
-h <FILE> 如果 <FILE> 存在切實一個符號鏈接則為真(與 -L 相同)
-g <FILE> 如果 <FILE> 存在且是設(shè)置了 sgid 位則為真
-u <FILE> 如果 <FILE> 存在且是設(shè)置了 suid 位則為真
-r <FILE> 如果 <FILE> 存在且是可讀的則為真
-w <FILE> 如果 <FILE> 存在且是可寫的則為真
-x <FILE> 如果 <FILE> 存在且是可執(zhí)行的則為真
-s <FILE> 如果 <FILE> 存在且不為空則為真
-t <fd> 如果文件描述符 <fd> 已打開且引用了一個終端則為真
<FILE1> -nt <FILE2> 如果 <FILE1> 比 <FILE2> 新則為真(指 mtime)
<FILE1> -ot <FILE2> 如果 <FILE1> 比 <FILE2> 舊則為真(指 mtime)
<FILE1> -ef <FILE2> 如果 <FILE1> 有硬鏈接到 <FILE2> 則為真

實例 1,檢查文件是否存在:


檢查文件是否存在

注意:上述命令語句中的 “$_” 表示前一個執(zhí)行的命令中的最后一個參數(shù)砌滞。

字符串測試操作符表###

操作符 描述
-z <STRING> 如果 <STRING> 為空則為真
-n <STRING> 如果 <STRING> 不為空則為真
<STRING1> = <STRING2></br><STRING1> != <STRING2></br><STRING1> \< <STRING2></br><STRING1> \> <STRING2> 字符串比較 ASCII 碼順序

算術(shù)測試操作符表###

操作符 描述
<INTEGER1> -eq <INTEGER2> 如果 <INTEGER1> 與 <INTEGER2> 相等則為真
<INTEGER1> -ne <INTEGER2> 如果 <INTEGER1> 與 <INTEGER2> 不相等則為真
<INTEGER1> -le <INTEGER2> 如果 <INTEGER1> 小于或等于 <INTEGER2> 則為真
<INTEGER1> -ge <INTEGER2> 如果 <INTEGER1> 大于或等于 <INTEGER2> 則為真
<INTEGER1> -lt <INTEGER2> 如果 <INTEGER1> 小于 <INTEGER2> 則為真
<INTEGER1> -gt <INTEGER2> 如果 <INTEGER1> 大于 <INTEGER2> 則為真

在 Bash 中還有一個 “[[]]” 關(guān)鍵字炼七,它是 “[]” 的提高版本:

[[ EXPRESSION ]]

但是 “[[]]” 關(guān)鍵字僅在 Bash、Zsh 和 Korn Shell 中可用布持,而 “[]” 幾乎可以在任意一種 Shell 下(只要符合 POSIX 標(biāo)準(zhǔn))使用。盡管 “[[]]” 和 “[]” 有許多共同點陕悬,它們共有很多表達式操作符题暖,如 -f、-s、-n 和 -z 等胧卤,但它們還有一些明顯的不同唯绍。

“[[]]” 和 “[]” 之間不同的比較###

Feature [[]] [] Example
String comparison > < \> \< [[ a > b ]]</br>[ a \> b]
Expression grouping (...) (...) [[ $var=img* && ($var = *.png $var = *.jpg ]]
Pattern matching = (not available) [[ $name = a* ]]
RegularExpression matching =~ (not available) [[ $(date) =~ ^Fri...\13]]

本文參考自 《Linux Shell命令行及腳本編程實例詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枝誊,隨后出現(xiàn)的幾起案子况芒,更是在濱河造成了極大的恐慌,老刑警劉巖叶撒,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绝骚,死亡現(xiàn)場離奇詭異,居然都是意外死亡祠够,警方通過查閱死者的電腦和手機压汪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古瓤,“玉大人止剖,你說我怎么就攤上這事÷渚” “怎么了穿香?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绎速。 經(jīng)常有香客問我皮获,道長,這世上最難降的妖魔是什么朝氓? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任魔市,我火速辦了婚禮,結(jié)果婚禮上赵哲,老公的妹妹穿的比我還像新娘待德。我一直安慰自己,他們只是感情好枫夺,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布将宪。 她就那樣靜靜地躺著,像睡著了一般橡庞。 火紅的嫁衣襯著肌膚如雪较坛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天扒最,我揣著相機與錄音丑勤,去河邊找鬼。 笑死吧趣,一個胖子當(dāng)著我的面吹牛法竞,可吹牛的內(nèi)容都是我干的耙厚。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼岔霸,長吁一口氣:“原來是場噩夢啊……” “哼薛躬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呆细,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤型宝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后絮爷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乓序,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡牲芋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礼华。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡肋殴,死狀恐怖谎替,靈堂內(nèi)的尸體忽然破棺而出抛计,到底是詐尸還是另有隱情,我是刑警寧澤跨释,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布胸私,位于F島的核電站,受9級特大地震影響鳖谈,放射性物質(zhì)發(fā)生泄漏岁疼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一缆娃、第九天 我趴在偏房一處隱蔽的房頂上張望捷绒。 院中可真熱鬧,春花似錦贯要、人聲如沸暖侨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽字逗。三九已至,卻和暖如春宅广,著一層夾襖步出監(jiān)牢的瞬間葫掉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工跟狱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俭厚,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓驶臊,卻偏偏與公主長得像套腹,于是被迫代替她去往敵國和親绪抛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理电禀,服務(wù)發(fā)現(xiàn),斷路器笤休,智...
    卡卡羅2017閱讀 134,720評論 18 139
  • 一尖飞,shell題記 不懂shell的程序員不是好程序員,學(xué)習(xí)shell是為了自動化店雅,使用自動化可以非常有效的提高工...
    架構(gòu)師小秘圈閱讀 8,728評論 3 70
  • Shell 快速指南 概述 什么是 shell Shell 是一個用 C 語言編寫的程序政基,它是用戶使用 Linux...
    靜默虛空閱讀 710評論 0 5
  • 清明那幾天和朋友們?nèi)チ颂宋錆h沮明,玩了將近三天。武漢的建筑很美窍奋,感覺每一個地方都是一道風(fēng)景荐健。 1號中午才到的武漢,第一...
    不若不若閱讀 301評論 0 0
  • E6高靈華臺州天使三階檢視0807-0813 E6-高靈華-臺州-周檢視 【天使三階周檢視】 #周檢視# E6-高...
    靈華有約閱讀 280評論 1 2