Bash指令碼中的條件語句


Bash指令碼,與其他程式語言一樣,具有if語句、迴圈和其他實用結構等功能,這些功能使該語言功能強大且用途廣泛。

在使用bash或掌握bash指令碼的過程中,理解最重要的概念之一是條件語句。條件語句允許我們根據給定條件執行某些程式碼或操作。

在本教程中,我們將學習如何在bash指令碼中使用if語句,並附帶示例和解釋。

什麼是條件語句?

一般來說,條件語句允許我們根據變數或表示式的值執行操作。這是透過將我們提供的值與條件進行匹配來實現的。

我們經常將其稱為決策,因為指令碼根據條件決定執行哪個部分。

bash中if語句的語法如下:

if condition
then
    commands
fi

在if關鍵字之後,我們放置需要測試的條件,在then關鍵字之後,我們放置如果給定條件為真則要執行的命令集。語句以fi關鍵字結尾,表示我們完成了該語句。請記住,語句以if開頭,以fi結尾。

為了更清楚地說明這一點,讓我們舉個例子。建立一個檔案並將其命名為,例如test.sh,其中包含以下程式碼:

 #!/bin/bash

x=2
y=2

if test $x -eq $y
   then
      echo "x and y are equal"
   fi

exit 0

在這個簡單的例子中,我們做了以下幾件事:

  • #!/bin/bash - 這裡,我們使用shebang將檔案定義為bash指令碼檔案。
  • x=2 and y=2 - 我們定義了兩個變數x和y,並將它們的值設定為2。
  • if test $x -eq $y - 我們進行條件測試以檢查變數x的值是否等於變數y的值。
  • then echo "x and y are equal" - 在這裡,我們指定如果條件為真將執行的指令。在這個例子中,我們列印一條訊息,說明x和y相等。
  • fi - 這個關鍵字表示我們完成了if語句。

現在,如果我們使用bash命令執行這段程式碼,我們將得到以下輸出:


我們得到訊息x and y are equal,因為我們制定的條件為真(x的值為2,y的值為2)。

如果您注意這個例子,我們會使用一個名為test的關鍵字,它允許我們評估條件。我們基本上是在告訴bash我們想要進行評估。

在一個真實的指令碼中,如果您已經見過一個指令碼,您可能看不到這個test關鍵字;相反,您會看到像這樣用方括號括起來的語句:

if [ $x -eq $y ]

方括號告訴bash我們想要測試括號裡的內容,它與test關鍵字的作用相同。在一些示例指令碼中,您可能會看到雙括號,如下所示:

if [[ $x -eq $y ]]

它們的作用相同,表示我們想要測試括號裡的內容,但是雙括號增加了更多功能,允許在括號內進行更復雜的評估。但是,雙括號只在bash中有效;如果您嘗試在其他環境中使用它們,它們將不起作用。

現在,問題是,如果條件為假,我們會得到什麼?您可以透過更改xy的值來嘗試一下。但是,我們不會得到任何輸出,因為我們沒有指定如果條件為假該怎麼做;我們只指定了真值的情況。

比較字串

我們在上一個例子中所做的只是一個簡單的程式碼,讓我們瞭解如何透過比較兩個變數來使用if條件。

但在大多數情況下,您不會處理這樣的例子。相反,您可能需要比較其他東西,例如字串。

讓我們舉一個需要將變數與給定字串進行比較的例子。

#!/bin/bash

echo "Enter your best website name"

read name

if [[ $name == "tutorialspoint" ]]

then
    echo "You are Right; the best website is Tutorialspoint"
fi

exit 0

讓我們瞭解這段指令碼的作用:

  • echo "Enter your best website name" - 這將把訊息“輸入您最好的網站名稱”列印到螢幕上。
  • read name - 這將等待使用者輸入名稱。
  • if [[ $name == "tutorialspoint" ]] - 在這裡,我們檢查輸入的名稱是否等於字串“tutorialspoint”。
  • echo "You are Right; the best website is Tutorialspoint" - 如果條件為真,則顯示此訊息。

現在,如果我們執行這段程式碼並輸入字串“tutorialspoint”,我們應該看到以下訊息:


在這個例子中,我們檢查輸入的文字是否等於“tutorialspoint”,如果為真,則列印訊息“You are Right; the best website is Tutorialspoint”。

請注意,我們在這裡使用雙括號進行測試。請確保括號和測試語句之間有空格,如下所示

[[ $name == "tutorialspoint" ]]

如果您像這樣寫[[$name == "tutorialspoint" ]] 或這樣 [[ $name == "tutorialspoint"]],您將收到語法錯誤。

Else語句

在前面的例子中,我們只處理了if語句。我們寫一個條件,如果條件為真,我們就做一些事情。else語句是我們可以新增的另一件事,它可以為我們的程式提供更多選項。或者,換句話說,我們告訴程式如果條件不為真該怎麼做。在第一個例子中,我們只有真值的情況;我們沒有看到假值的情況。

讓我們舉個例子來更清楚地說明這一點。將以下程式碼新增到test檔案中:

#!/bin/bash

echo "Enter your best website name"

read name

if [[ $name == "tutorialspoint" ]]

then
    echo "You are Right the best website is Tutorialspoint"
else
    echo "You chose $name"
fi

exit 0

這個例子與之前的例子相同,只是這裡我們添加了else語句。因此,如果輸入的名稱不是“tutorialspoint”,則包含echo "You chose $name" 的程式碼塊將被執行。

在這裡,我們基本上列印輸入的名稱。如果條件為假,則輸出應如下所示:


在這個例子中,輸入的文字是google.com。

多個條件

有時我們需要在Bash指令碼中檢查多個條件。有一些不錯的辦法可以做到這一點,其中一種是使用管道(|)。

讓我們來看一下之前的例子,在這個例子中,我們要求輸入最好的網站名稱,並將條件字串設定為“tutorialspoint”。但是,如果我們以不同的樣式輸入相同的名稱呢?例如,“tutorials point”或“Tutorials Point”,這是相同的名稱,但我們的程式不會識別它,因為我們只輸入了名稱“tutorialspoint”。為了解決這個問題,我們可以這樣做:

#!/bin/bash

echo "Enter your best website name"

read name

if [[ $name == "tutorialspoint" || $name == "tutorials point" || $name == "Tutorials Point" ]]

then
    echo "You are Right the best website is Tutorialspoint"
else
    echo "You chose $name"
fi

exit 0

在這個例子中,我們只是使用管道運算子添加了更多測試。我們能夠在同一行程式碼中檢查多個測試。因此,如果我們嘗試“tutorials point”,我們應該得到相同的結果。


Bash指令碼在這種情況下有一些功能可以簡化這一長行程式碼。我們可以使用一個技巧來避免每次都重複相同的變數:

#!/bin/bash

echo "Enter your best website name"

read name

if [[ $name == @(tutorialspoint|tutorials point|Tutorials Point) ]]

then
    echo "You are Right; the best website is Tutorialspoint"
else
    echo "You chose $name"
fi

exit 0

我們將長行替換為花括號內的@()。我們放置選項並用管道||分隔它們。如果我們執行這段程式碼,我們應該得到相同的結果。

注意:此替換僅適用於雙括號。

另一種方法是使用elif語句。我們在前面的例子中看到了如何使用else;使用elif,我們可以新增另一個具有不同結果的條件。

讓我們來看一下以下例子

#!/bin/bash

echo "Enter your best website name"

read name

if [[ $name == "tutorialspoint" ]]

then
    echo "You are Right; the best website is Tutorialspoint"

elif [[ $name == "google" ]]

then 
    echo "Your best website is Google"
else
    echo "You chose $name"
fi

exit 0

在這個例子中,我們使用elif [[ $name == "google" ]]添加了另一個條件,如果此條件為真,我們將有一個不同的程式碼塊要執行。在這個例子中,它是一條簡單的訊息:Your best website is Google


使用多個條件和elif語句的區別在於,elif為我們提供了另一個不同的選項。

結論

Bash指令碼是一種簡單而強大的語言,您可以透過練習示例和獲得正確的解釋來掌握它。

在本教程中,我們解釋瞭如何在Bash中使用if語句使指令碼更具互動性。我們從一個簡單的例子開始,展示了條件語句是如何工作的,然後繼續介紹在shell指令碼中使用條件的不同方法。

更新於:2024年11月21日

瀏覽量:1

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告