shell 條件測試語句 test

2022-09-01 06:12:07 字數 2659 閱讀 1955

shell環境根據命令執行後的返回狀態值($?)來判斷是否執行成功,當返回值為0時表示成功,否則(非0值)表示失敗或異常。使用專門的測試工具test命令,可對條件進行測試,並根據返回值來判斷條件是否成立(返回值為0表示成立)。

使用test測試命令時

這兩種方式作用完全相同,但是通常使用後者。根據要測試的條件類別不同,條件表示式也不同,比較常用的條件操作包括檔案測試、整數值比較、字串比較,以及針對多個條件的邏輯測試。

檔案測試指的是根據給定的路徑名稱,判斷對應的是檔案還是目錄,或者判斷檔案是否可讀,可寫,可執行等。檔案測試的常見操作選項如下,使用時將測試物件放在操作選項之後即可.

執行條件測試操作以後,通過預定義變數"$?" 可以獲得測試命令的返回狀態值,從而判斷該條件是否成立,例如,執行以下操作可測試目錄/etc/pam.d是否存在,如果返回值s?為0.表示存在此目錄,否則表示不存在或者雖然存在但不是目錄

[root@localhost ~]# [ -d /etc/pam.d ]

[root@localhost ~]# echo $?

0[root@localhost ~]# [ -d /etc/pam ]

[root@localhost ~]# echo $?

1

通過檢視變數「$?」變數值可以判斷前一步的條件測試結果。但是操作比較煩瑣,輸出結果並不是很直觀。為了更方便檢視測試結果,可以結合命令分隔符「&&」和echo命令一起使用,當條件成立時直接輸出yes。其中,「&&」符號表示「而且」的關係,只有當前面的命令支援成功後才會執行後面的命令。否則後面的命令將會被忽略。

將上面的改寫一下:(無輸出則表示不存在,輸出yes表示該目錄存在)

[root@localhost ~]# [ -d /etc/pam.d ] && echo

yesyes

整數值比較是根據給定的兩個整數值,判斷第乙個數與第二個數的關係,如是否大於,等於或者小於第2個數。

數值比較常用操作選項如下:

整數值比較在shell指令碼編寫中的應用較多。例如,用來判斷已登入使用者數量、開啟程序數.磁碟使用率是否超標,以及軟體版本號是否符合要求等,實際使用時,往往會通過變數引用.命令替換等方式來獲取乙個數值。

例如:若要判斷當前已登入的使用者數、當超過五個時輸出"toomany.". 可以執行以下操作,其中,已登入使用者數可通過who|wc -1命令獲得,以命令替換方式嵌入,

unum=`who | wc -l`  //

檢視當前已登入使用者數

[ $unum –gt 10 ] && echo 「too many.」 //

期試結果大於

例如,若要判斷當前可用的空閒記憶體大小,當低於1024mb的時候輸出具體數值,可以執行以下操作,.其中,free –m命令表示以mb為單位輸出記憶體資訊,提取的空閒值數值通過命令替換賦值給變數freecc.

freecc=$(free -m | grep

"cache:

" | awk''

)[ $freecc -lt 1024 ] && echo

"$mb

"

其通常用來檢查使用者輸入,系統環境等是否滿足條件,在提供互動式操作的shell指令碼中,也可用來判斷使用者輸入的位置引數是否符合要求,字串比較的常用操作選項如下。

例如,若要判斷當前系統的語言環境,當發現不是'en.us" 時輸出提示資訊"not enus

可以執行以下操作:

echo

$lang

[ $lang != "

en_us.utf-8

" ] && echo

"not en.us

"

例如,在shell指令碼應用中,經常需要使用者輸入『yes』或『no』 來確認某個任務。以下操作展示了確認互動的簡單過程,當然,實際使用時還會根據變數ack" 的取值分別執行進一步的操作。

# read -p「是否覆蓋現有檔案(yes/no)?"  ack

# [ $ack = "yes" ] && echo 「覆蓋「

# read ~p「是否覆蓋現有檔案(yes/no)?" ack

是否覆蓋現有檔案(yes/no) ?no

# [ $ack= "no" ] && echo "不覆蓋」

邏輯測試指的是判斷兩個或多個條件之間的依賴關係。當系統任務取決於多個不同的條件時,根據這些條件是否同時成立或者只要有其中乙個成立等情況,需要有乙個測試的過程。常用的邏輯測試操作如下,使用時放在不同的測試語句或命令之間.

在上述邏輯測試的操作選項中,&&和"||」通常也用於間隔不同的命令操作,其作用是相似的。實際上此前已經接觸過&&操作的應用,如make && make install 的編譯安裝操作。

例如,若要判斷當前linux系統的核心版本是否大於2.4.可以執行以下操作,其中,核心版本號通過uname和awk命令獲得。

# uname –r

# mnum=$(uname -r | awk -f. '')

# snum=$(uname -r | awk -f. '')

# [ $mnum -eq 2 ] && [ $snum -gt 4 ] && echo "符合要求"

shell 條件測試 test

shell環境根據命令執行後的返回狀態值 來判斷是否執行成功,當返回值為0時表示成功,否則 非0值 表示失敗或異常。使用專門的測試工具test命令,可對條件進行測試,並根據返回值來判斷條件是否成立 返回值為0表示成立 使用test測試命令時 使用格式 檔案測試 檔案測試指的是根據給定的路徑名稱,判斷...

shell條件測試test

shell條件測試可以通過以下兩種方式 test 引數 測試內容 引數 測試內容 一 測試檔案型別 test e 檔名 測試檔案是否存在 e 檔名 測試檔案是否存在,注意中括號兩邊的空格 test f 檔名 判斷是否為普通檔案 test d 檔名 判斷是否為目錄 test b 檔名 判斷是否為塊裝置...

Shell 條件測試(test)基礎語法

條件測試的語法有兩種 test 條件表示式 或 條件表示式 注意 中括號 與條件表示式之間一定要有空格,不然會報錯 字串運算子 運算子說明string 判斷指定的字元是否為空串 string1 string2 判斷兩個字串string1和string2是否相等 string1 string2 判斷兩...