SHELL test 命令用法(一)

2021-06-03 08:12:46 字數 3759 閱讀 6023

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

在 shell 指令碼中進行的每一種操作(除最簡單的命令編組之外)都需要檢查條件。所有的 shell 指令碼「邏輯」 — 廣義意義下的「邏輯」 — 通常都可以分為以下三大類:

if then ...

while do ...

until 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 檔案運算子

利用這些運算子,您可以在程式中根據對檔案型別的評估結果執行不同的操作:

-b file 如果檔案為乙個塊特殊檔案,則為真

-c file 如果檔案為乙個字元特殊檔案,則為真

-d file 如果檔案為乙個目錄,則為真

-e file 如果檔案存在,則為真

-f file 如果檔案為乙個普通檔案,則為真

-g file 如果設定了檔案的 sgid 位,則為真

-g file 如果檔案存在且歸該組所有,則為真

-k file 如果設定了檔案的粘著位,則為真

-o file 如果檔案存在並且歸該使用者所有,則為真

-p file 如果檔案為乙個命名管道,則為真

-r file 如果檔案可讀,則為真

-s file 如果檔案的長度不為零,則為真

-s file 如果檔案為乙個套接字特殊檔案,則為真

-t fd 如果 fd 是乙個與終端相連的開啟的檔案描述符(fd 預設為 1),則為真

-u file 如果設定了檔案的 suid 位,則為真

-w file 如果檔案可寫,則為真

-x file 如果檔案可執行,則為真

菜鳥Shell test 命令

shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值 字元和檔案三個方面的測試。引數說明 eq等於則為真 ne不等於則為真 gt大於則為真 ge大於等於則為真 lt小於則為真 le小於等於則為真 num1 100 num2 100 if test num1 eq num2 then...

Shell教程 Shell test 命令

shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值 字元和檔案三個方面的測試。引數說明 eq等於則為真 ne不等於則為真 gt大於則為真 ge大於等於則為真 lt小於則為真 le小於等於則為真 例項演示 num1 100 num2 100 if test num1 eq num2...

at 命令用法

at命令的用法 at列出在指定的時間和日期在計算機上執行的已計畫命令或計畫命令和程式。必須正在執行 計畫 服務才能使用 at 命令。at computername id delete delete yes at computername time interactive every date nex...