具有多個條件的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語句。您可以根據實際需要選擇合適的方式。