教程

具有多個條件的bash-if語句

在編寫Bash腳本時,我們希望根據條件有多個可能的控制流。if條件語句可以隱式將測試表達式轉換為布爾值,從而有條件地處理語句。使用if語句和多個條件,我們可以在值和預期之間進行邏輯比較。我們還可以使用多個條件可選地指定else子句。

在本教程中,我們將學習如何使用if語句連接多個條件。

多個條件

有時,使用if語句的測試表達式可能並不那麼簡單和直接。我們可能需要連接多個表達式來開發代碼流的條件。對於這種涉及多個條件的情況,我們可以使用不同的方法。

使用Bash邏輯運算符

邏輯運算符以這樣的方式連接兩個或多個表達式,使得複合表達式的值僅取決於原始表達式和運算符的值。在Bash中,這些邏輯運算符是AND(&&)和OR(||)。

語法

[ EXPR1 ] && [ EXPR2 ]    如果EXPR1和EXPR2都為真,則為真。
[ EXPR1 ] || [ EXPR2 ]    如果EXPR1或EXPR2中任一一個為真,則為真。

例子

num=150``if` `[ $num -gt 100 ] && [ $num -lt 200 ]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi

Bash將表達式拆分為更簡單的表達式,然後單獨評估每個表達式。完成後,它再查看邏輯運算符以重新組裝這些表達式,以確定原始表達式的結果。在這個例子中,整數值存在於變數num中。if條件可以被視為2個單獨的if語句。第一個檢查變數是否大於100,這是真的。第二個檢查數字是否小於200,這也是真的。由於兩者都是真的,我們有一個邏輯AND,結果也變為真。這會觸發「then」塊中存在的語句。

使用單個測試別名

Bash允許我們使用邏輯運算符將多個條件合併為一個測試別名。我們需要使用-a(表示and)和-o(表示or)操作。評估如下:

語法

[ EXPR1 -a EXPR2 ]  如果EXPR1和EXPR2都為真,則為真。
[ EXPR1 -o EXPR2 ]  如果EXPR1或EXPR2中任一一個為真,則為真。

例子

num=150``if` `[ $num -gt 100 -a $num -lt 200 ]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi``if` `[ $num -gt 100 -o $num -lt 50 ]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi

Bash使用與前一個示例中相同的邏輯,將表達式拆分為更簡單的表達式,然後單獨評估每個表達式。然後,它檢查運算符並重新組裝這些表達式以計算原始表達式的結果。可以將此示例視為2個單獨的if語句,使用-a標誌連接在一起。由於兩者都為真,結果為真,因此「then」塊執行。

同樣,在下一個示例中,表達式的第一部分為真,第二部分為假。使用-o標誌將它們組合將導致結果為真,如果任何表達式的結果為真。

使用雙方括弧

使用if語句具有多個條件的另一種方法是使用雙方括弧符號。

語法

[[ EXPR1 && EXPR2 ]] 如果EXPR1和EXPR2都為真,則為真。[[ EXPR1 || EXPR2 ]] 如果EXPR1或EXPR2中任一一個為真,則為真。

例子

num=150``if` `[[ $num -gt 100 && $num -lt 200 ]]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi``if` `[[ $num -gt 100 || $num -lt 50 ]]; ``then` `echo` `true``; ``else` `echo` `false``; ``fi

在這個例子中,我們使用雙方括弧,所以我們可以在條件測試中直接使用邏輯運算符。使用雙方括弧的好處之一是可以使用更多的比較運算符,例如=,!=,, =。

三元運算符

使用三元運算符來處理多個條件也是一種有效的方法。三元運算符是一個具有三個操作數的運算符,其中第一個操作數是一個比較運算符,第二個操作數是真值時返回的值,第三個操作數是假值時返回的值。

語法

[ EXPR1 ] && echo "true" || echo "false"

例子

num=150``[ $num -gt 100 ] && echo "true" || echo "false"``[ $num -lt 100 ] && echo "true" || echo "false"

在這個例子中,如果第一個測試條件為真,則輸出true。否則,輸出false。第二個測試條件返回false,因此我們得到了false輸出。

使用case語句

使用case語句也是一種有效的方法來處理多個條件。case語句使用模式匹配來測試變數或表達式中的值,並根據匹配到的模式執行相應的命令。

語法

`case` `$variable` `in`
`pattern1` `)` `command1` `;;`
`pattern2` `)` `command2` `;;`
...
`patternN` `)` `commandN` `;;`
`esac`

例子

fruit=apple
case $fruit in
  apple) echo "This is an apple.";;
  banana) echo "This is a banana.";;
  *) echo "This is not an apple or a banana.";;
esac

在這個例子中,我們測試變數$fruit,並使用模式匹配測試其值。如果它匹配模式「apple」,則輸出「This is an apple.」。如果它匹配模式「banana」,則輸出「This is a banana.」。否則,輸出「This is not an apple or a banana.」。

結論

在Bash腳本中,if語句是一種非常有用的工具,可用於控制流的條件處理。處理多個條件的方法有多種,包括邏輯運算符,單個測試別名,雙方括弧,三元運算符和case語句。您可以根據實際需要選擇合適的方式。

對這篇文章感覺如何?

太棒了
1
不錯
2
愛死了
0
不太好
0
感覺很糟
0

You may also like

Leave a reply

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

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

More in:教程

教程

在 Ubuntu 像22.04 LTS Linux 安裝 JUnit 5

JUnit 不僅簡單而且是一種有效的方法來編寫和執行 Java 應用程序的單元測試,因此它是開源類別中使用最廣泛的測試框架。 JUnit的最新版本5發布時帶來了許多改進。 所以,如果你使用Ubuntu […]
教程

同時運行多個 Linux 命令

了解如何在 Linux 中同時執行多個命令可以顯著提高您的效率和生產力。本文將指導您通過各種方式在單行中運行多個 Linux 命令,甚至如何自動化重複的任務。 理解基礎知識 在深入了解高級技巧之前,您 […]