一、概述
上篇文章 介紹了 if 語句相關知識。但 if 語句只能執(zhí)行命令,判斷該命令的結果,但在編程中,我們多數(shù)情況需要判斷一個變量的值是否為空?判斷兩個變量的值誰更大?判斷變量的字符串是否相等?這些判斷條件,使用 if 語句無法直接判斷。這篇文章介紹
二、test 命令
2.1 test 命令
if 語句中只能執(zhí)行該語句后面的命令,并判斷命令的退出狀態(tài)碼,而不能判斷其他的條件,如:兩個值是否相等。如果想要判斷兩個值是否相等,就需要把這個判斷放到一個命令中,再把這個命令放在 if 語句后面去執(zhí)行,而
test
命令就可以來做這樣的判斷。如果
test
命令中列出的條件成立,那么test
命令就會退出并返回退出狀態(tài)碼 0。
test 命令的格式非常簡單:test condition
condition 是 test 命令要測試的一系列參數(shù)和值。當用在 if-then 語句中時, test 命令看起來如下所示:
if test condition then commands fi
如果不寫 test 命令的 condition 部分,則它會以非 0 的退出狀態(tài)碼退出并執(zhí)行 else 代碼塊語句。
2.2 方括號測試條件
bash shell 提供了另一種條件測試方式,無須在 if-then 語句中寫明 test 命令:
if [ condition ] then commands fi
方括號定義了測試條件。
注意,第一個方括號之后和第二個方括號之前 必須 留有空格,否則就會報錯。
2.3 test 命令和測試條件可以判斷的 3 類條件
test 命令和測試條件可以判斷 3 類條件:
- 數(shù)值比較
- 字符串比較
- 文件比較
2.3.1 數(shù)值比較
使用 test 命令最常見的情形是對兩個數(shù)值進行比較。下表列出了測試兩個值時可用的條件參數(shù)
比 較 描 述 n1 -eq n2 檢查 n1 是否等于 n2 n1 -ge n2 檢查 n1 是否大于或等于 n2 n1 -gt n2 檢查 n1 是否大于 n2 n1 -le n2 檢查 n1 是否小于或等于 n2 n1 -lt n2 檢查 n1 是否小于 n2 n1 -ne n2 檢查 n1 是否不等于 n2 注意:對于條件測試, bash shell 只能處理整數(shù)。
2.3.2 字符串比較
條件測試還允許比較字符串值。下表列出了可用的字符串比較功能
比 較 描 述 str1 = str2 檢查 str1 是否和 str2 相同 str1 != str2 檢查 str1 是否和 str2 不同 str1 < str2 檢查 str1 是否小于 str2 str1 > str2 檢查 str1 是否大于 str2 -n str1 檢查 str1 的長度是否不為 0 -z str1 檢查 str1 的長度是否為 0 注意
- 在比較字符串的相等性時,比較測試會將所有的標點和大小寫情況都考慮在內(nèi)
- 大于號和小于號必須轉(zhuǎn)義(
\>
、\<
),否則 shell 會將其視為重定向符,將字符串值當作文件名。- 比較測試中使用的是標準的 Unicode 順序,根據(jù)每個字符的 Unicode 編碼值來決定排序結果,結果和 sort 命令不同
三、復合條件測試
if-then 語句允許使用布爾邏輯將測試條件組合起來。可以使用以下兩種布爾運算符
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
第一種布爾運算使用布爾運算符 AND 來組合兩個條件。要執(zhí)行 then 部分的命令,兩個條件都必須滿足。
第二種布爾運算使用 OR 布爾運算符來組合兩個條件。如果任意條件為真,那么 then 部分的命令就會執(zhí)行。例子:
#!/bin/bash # Testing an AND Boolean compound condition # if [ -d $HOME ] && [ -w $HOME/newfile ] then echo "The file exists and you can write to it." # else echo "You cannot write to the file." # fi
四、if-then 的高級特性
bash shell 還提供了 3 個可在 if-then 語句中使用的高級特性。\
- 在子 shell 中執(zhí)行命令的單括號。
- 用于數(shù)學表達式的雙括號。
- 用于高級字符串處理功能的雙方括號。
五、case 命令
如果在在一組可能的值中尋找特定值,使用if語句來判斷的話,代碼會很冗長。shell提供了
case
命令來解決此類問題。
case 命令會采用列表格式來檢查變量的多個值,其格式如下:case variable in pattern1 | pattern2) commands1;; pattern3) commands2;; *) default commands;; esac
例子:文章來源:http://www.zghlxwxcb.cn/news/detail-599902.html
#!/bin/bash # Using a short case statement # case $USER in rich | christine) echo "Welcome $USER" echo "Please enjoy your visit.";; barbara | tim) echo "Hi there, $USER" echo "We're glad you could join us.";; testing) echo "Please log out when done with test.";; *) echo "Sorry, you are not allowed here." esac
如果文章有幫助的話,點贊??、收藏?,支持一波,謝謝 ??????文章來源地址http://www.zghlxwxcb.cn/news/detail-599902.html
到了這里,關于【Linux | Shell】結構化命令2 - test命令、方括號測試條件、case命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!