Bash 基礎知識系列 #7:If Else 語句
Bash 支持 if-else 語句,以便你可以在 shell 腳本中使用邏輯推理。
通用的 if-else 語法如下:
if [ expression ]; then
## 如果條件為真則執行此塊,否則轉到下一個
elif [ expression ]; then
## 如果條件為真則執行此塊,否則轉到下一個
else
## 如果以上條件都不成立,則執行此塊
fi
正如你所注意到的:
elif
用於 「否則如果」 類型的條件。- if-else 條件始終以
fi
結尾。 - 使用分號
;
和then
關鍵字
在展示 if 和 else-if 的示例之前,我先分享一下常見的比較表達式(也稱為測試條件)。
測試條件
以下是可用於數字比較的測試條件運算符:
條件 | 當滿足以下條件時為真 |
---|---|
$a -lt $b |
$a < $b ($a 小於 $b ) |
$a -gt $b |
$a > $b ($a 大於 $b ) |
$a -le $b |
$a <= $b ($a 小於等於 $b ) |
$a -ge $b |
$a >= $b ($a 大於等於 $b ) |
$a -eq $b |
$a == $b |
$a -ne $b |
$a != $b |
如果你要比較字元串,可以使用以下測試條件:
條件 | 當滿足以下條件時為真 |
---|---|
"$a" = "$b" |
$a 與 $b 相同 |
"$a" == "$b" |
$a 與 $b 相同 |
"$a" != "$b" |
$a 與 $b 不同 |
-z "$a" |
$a 為空字元串 |
文件類型檢查也有條件:
條件 | 當滿足以下條件時為真 |
---|---|
-f $a |
$a 是一個文件 |
-d $a |
$a 是一個目錄 |
-L $a |
$a 是一個鏈接 |
現在你已經了解了各種比較表達式,讓我們在各種示例中看看它們的實際應用。
在 Bash 中使用 if 語句
讓我們創建一個腳本來告訴你給定的數字是否為偶數。
這是我的腳本,名為 even.sh
:
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
fi
當模數運算(%
)整除給定數字(本例中為 2)時,它返回零。
? 特別注意空格。左括弧和右括弧與條件之間必須有空格。同樣,條件運算符(-le、== 等)前後必須有空格。
這是我運行腳本時顯示的內容:
你是否注意到,當數字為偶數時,腳本會告訴你,但當數字為奇數時,腳本不會顯示任何內容? 讓我們使用 else 來改進這個腳本。
使用 if else 語句
現在我在前面的腳本中添加了一條 else
語句。這樣,當你得到一個非零模數(因為奇數不能除以 2)時,它將進入 else
塊。
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
else
echo "Number $num is odd"
fi
讓我們用相同的數字再次運行它:
正如你所看到的,該腳本更好,因為它還告訴你該數字是否為奇數。
使用 elif(否則如果)語句
這是一個檢查給定數字是正數還是負數的腳本。在數學中,0 既不是正數也不是負數。該腳本也檢查了這一事實。
#!/bin/bash
read -p "Enter the number: " num
if [ $num -lt 0 ]; then
echo "Number $num is negative"
elif [ $num -gt 0 ]; then
echo "Number $num is positive"
else
echo "Number $num is zero"
fi
讓我運行它來涵蓋這裡的所有三種情況:
用邏輯運算符組合多個條件
到目前為止,一切都很好。但是你是否知道通過使用與(&&)、或(||)等邏輯運算符可以在一個條件中包含多個條件? 它使你能夠編寫複雜的條件。
讓我們編寫一個腳本來告訴你給定的年份是否是閏年。
你還記得閏年的條件嗎? 它應該被 4 整除,但如果它能被 100 整除,那麼它就不是閏年。但是,如果能被 400 整除,則為閏年。
這是我的腳本。
#!/bin/bash
read -p "Enter the year: " year
if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
echo "Year $year is leap year"
else
echo "Year $year is normal year"
fi
? 注意上面雙括弧
[[ ]]
的使用。如果你使用邏輯運算符,則這是強制性的。
通過使用不同的數據運行腳本來驗證腳本:
?️ 練習時間
讓我們做一些練習吧 ?
練習 1:編寫一個 Bash Shell 腳本,檢查作為參數提供給它的字元串的長度。如果未提供參數,它將列印 「empty string」。
練習 2:編寫一個 Shell 腳本來檢查給定文件是否存在。你可以提供完整的文件路徑作為參數或直接在腳本中使用它。
提示:文件使用 -f 選項
練習 3:通過檢查給定文件是否是常規文件、目錄或鏈接或者是否不存在來增強之前的腳本。
提示:使用 -f、-d 和 -L
練習 3:編寫一個接受兩個字元串參數的腳本。腳本應檢查第一個字元串是否包含第二個參數的子串。
提示:請參閱上一章 Bash 字元串
我希望你喜歡 Bash 基礎知識系列。在下一章中,你將了解如何在 Bash 中使用循環。繼續編寫 Bash!
(題圖:MJ/1e8f2f5c-9e47-4c84-b8c1-072808e9cf70)
via: https://itsfoss.com/bash-if-else/
作者:Abhishek Prakash 選題:lkxed 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive