Linux中國

Bash 基礎知識系列 #7:If Else 語句

如果這樣,那就那樣,否則就……。還不明白嗎?了解了 Bash Shell 腳本中的 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、== 等)前後必須有空格。

這是我運行腳本時顯示的內容:

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:通過檢查給定文件是否是常規文件、目錄或鏈接或者是否不存在來增強之前的腳本。

提示:使用 -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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國