linux中shell命令test用法和舉例

2021-09-08 13:36:57 字數 3364 閱讀 7408

shell test命令 和 [ 是同乙個命令的不同名稱。

原文: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命令用法。功能:檢查檔案和比較值

1)判斷表示式

if test  (表示式為真)

if test !表示式為假

test 表示式1 –a 表示式2                  兩個表示式都為真

test 表示式1 –o 表示式2                 兩個表示式有乙個為真

2)判斷字串

test –n 字串                                   字串的長度非零

test –z 字串                                    字串的長度為零

test 字串1=字串2                    字串相等

test 字串1!=字串2               字串不等

3)判斷整數

test 整數1 –eq 整數2                        整數相等

test 整數1 –ge 整數2                        整數1大於等於整數2

test 整數1 –gt 整數2                         整數1大於整數2

test 整數1 –le 整數2                         整數1小於等於整數2

test 整數1 –lt 整數2                          整數1小於整數2

test 整數1 –ne 整數2                        整數1不等於整數2

4)判斷檔案

test  file1 –ef  file2        兩個檔案具有同樣的裝置號和i結點號

test  file1 –nt  file2        檔案1比檔案2 新

test  file1 –ot  file2        檔案1比檔案2 舊

test –b file        檔案存在並且是塊裝置檔案

test –c file        檔案存在並且是字元裝置檔案

test –d file        檔案存在並且是目錄

test –e file        檔案存在

test –f file         檔案存在並且是正規檔案

test –g file        檔案存在並且是設定了組id

test –g file        檔案存在並且屬於有效組id

test –h file        檔案存在並且是乙個符號鏈結(同-l)

test –k file        檔案存在並且設定了sticky位

test –b file        檔案存在並且是塊裝置檔案

test –l file        檔案存在並且是乙個符號鏈結(同-h)

test –o file        檔案存在並且屬於有效使用者id

test –p file        檔案存在並且是乙個命名管道

test –r file        檔案存在並且可讀

test –s file        檔案存在並且是乙個套接字

test –t fd        檔案描述符是在乙個終端開啟的

test –u file        檔案存在並且設定了它的set-user-id位

test –w file        檔案存在並且可寫

test –x file        檔案存在並且可執行

每一種條件語句的基礎都是判斷什麼是真什麼是假。是否了解其工作原理將決定您編寫的是質量一般的指令碼還是您將引以為榮的指令碼。

shell 指令碼的能力時常被低估,但實際上其能力的發揮受制於指令碼撰寫者的能力。您了解得越多,您就越能像變戲法似地撰寫乙個檔案來使任務自動化和簡化您的管理工作。

例1.比較兩個數大小

#/bin/bash

echo 「please enter two number」

read a

read b

if test $a -eq $b

then echo 「no.1 = no.2″

elif test $a -gt $b

then echo 「no.1 > no.2″

else echo 「no.1 < no.2″

fi例2.查詢/root/目錄下是否存在該檔案

#/bin/bash

echo 「enter a file name:」

read a

if test  -e /root/$a

then echo 「the file is exist!」

else echo 「the file is not exist!」

fi

linux中的shell命令

e filename 如果filename存在,則為真 d filename 如果filename為目錄,則為真 f filename 如果filename為常規檔案,則為真 l filename 如果filename為符號鏈結,則為真 r filename 如果filename可讀,則為真 w f...

shell中的linux命令

dirname 0 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 0 為執行的檔名 包含檔案路徑 dirname命令去除檔名中的非目錄部分,刪除最後乙個 後面的路徑,顯示父目錄 basename命令用於列印目錄或者檔案的基本名稱,顯示最後的目錄名或檔名 ...

linux中shell等命令參考

顯示所有檔案 包含隱藏檔案 ls a 只顯示隱藏檔案 l.或者 ls d 檢視cpu資訊 機器硬體型號 linux 檢視顯示卡資訊 lspci grep i vga nvidia gpu檢視顯示卡資訊 lspci grep i nvidia nvidia 自帶工具 nvidia smi 前邊的序號 ...