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中有效;如果您嘗試在其他環境中使用它們,它們將不起作用。
現在,問題是,如果條件為假,我們會得到什麼?您可以透過更改x和y的值來嘗試一下。但是,我們不會得到任何輸出,因為我們沒有指定如果條件為假該怎麼做;我們只指定了真值的情況。
比較字串
我們在上一個例子中所做的只是一個簡單的程式碼,讓我們瞭解如何透過比較兩個變數來使用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指令碼中使用條件的不同方法。