Bash 基礎知識系列 #7:If Else 語句
Bash 支持 if-else 語句,以便你可以在 shell 腳本中使用邏輯推理。
通用的 if-else 語法如下:
if [ expression ]; then
## 如果條件為真則執(zhí)行此塊,否則轉到下一個
elif [ expression ]; then
## 如果條件為真則執(zhí)行此塊,否則轉到下一個
else
## 如果以上條件都不成立,則執(zhí)行此塊
fi
正如你所注意到的:
elif
用于 “否則如果” 類型的條件。- if-else 條件始終以
fi
結尾。 - 使用分號
;
和then
關鍵字
在展示 if 和 else-if 的示例之前,我先分享一下常見的比較表達式(也稱為測試條件)。
測試條件
以下是可用于數字比較的測試條件運算符:
條件 | 當滿足以下條件時為真 |
|
|
|
|
|
|
|
|
|
|
|
|
如果你要比較字符串,可以使用以下測試條件:
條件 | 當滿足以下條件時為真 |
|
|
|
|
|
|
|
|
文件類型檢查也有條件:
條件 | 當滿足以下條件時為真 |
|
|
|
|
|
|
現在你已經了解了各種比較表達式,讓我們在各種示例中看看它們的實際應用。
在 Bash 中使用 if 語句
讓我們創(chuàng)建一個腳本來告訴你給定的數字是否為偶數。
這是我的腳本,名為 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、== 等)前后必須有空格。
這是我運行腳本時顯示的內容:
Running a script with if statement example in bash
你是否注意到,當數字為偶數時,腳本會告訴你,但當數字為奇數時,腳本不會顯示任何內容? 讓我們使用 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
讓我們用相同的數字再次運行它:
Running a bash script that checks odd even number
正如你所看到的,該腳本更好,因為它還告訴你該數字是否為奇數。
使用 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
讓我運行它來涵蓋這里的所有三種情況:
Running a script with bash elif statement
用邏輯運算符組合多個條件
到目前為止,一切都很好。但是你是否知道通過使用與(&&)、或(||)等邏輯運算符可以在一個條件中包含多個條件? 它使你能夠編寫復雜的條件。
讓我們編寫一個腳本來告訴你給定的年份是否是閏年。
你還記得閏年的條件嗎? 它應該被 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
?? 注意上面雙括號
[[ ]]
的使用。如果你使用邏輯運算符,則這是強制性的。
通過使用不同的數據運行腳本來驗證腳本:
Example of running bash script with logical operators in if statement
??? 練習時間
讓我們做一些練習吧 ??
練習 1:編寫一個 Bash Shell 腳本,檢查作為參數提供給它的字符串的長度。如果未提供參數,它將打印 “empty string”。
練習 2:編寫一個 Shell 腳本來檢查給定文件是否存在。你可以提供完整的文件路徑作為參數或直接在腳本中使用它。
提示:文件使用 -f 選項
練習 3:通過檢查給定文件是否是常規(guī)文件、目錄或鏈接或者是否不存在來增強之前的腳本。
提示:使用 -f、-d 和 -L
練習 3:編寫一個接受兩個字符串參數的腳本。腳本應檢查第一個字符串是否包含第二個參數的子串。
提示:請參閱上一章 Bash 字符串
我希望你喜歡 Bash 基礎知識系列。在下一章中,你將了解如何在 Bash 中使用循環(huán)。繼續(xù)編寫 Bash!