Bash case語句


在本小節中,我們將討論Bash case語句的基礎以及如何在Bash指令碼中使用。

Bash case語句是具有許多ELIF元素的IF-THEN-ELSE的最簡單形式。使用case語句使bash指令碼更具可讀性,並且更易於維護。它通常用於簡化具有多種不同選擇的複雜條件。

Bash case語句遵循與Javascript或C語言中的switch語句類似的邏輯。但是又略有不同,如下所示:

  • Bash case語句只接受一次值,然後多次測試該值。一旦找到模式就執行與其連結的語句,它將停止搜尋模式,這與C switch語句幾乎相反。

case語句語法

bash case語句的語法如下:

case expression in  
    pattern_1)  
        statements  
        ;;  
    pattern_2)  
        statements  
        ;;  
    pattern_3|pattern_4|pattern_5)  
        statements  
        ;;  
    pattern-n)  
        statements  
        ;;  
    *)  
        statements  
        ;;  
esac
  • bash case語句的一些重要說明:

  • bash中的每個case語句均以case關鍵字開頭,後接case表示式和in關鍵字。使用esac關鍵字關閉case語句。

  • 可以應用以|分隔的多個模式運算子,運算子指示模式列表的終止。
  • 包含語句的模式稱為子句,並且必須以雙分號(;;)終止。
  • 星號(*)用作定義預設情況的最終模式。當用作最後一種情況時,它用作預設情況。

運作方式

首先,case語句擴充套件表示式並嘗試與每個包含的模式匹配。找到匹配項後,將執行所有連結的語句,直到雙分號(;;)為止。在第一個匹配項之後,case以最後執行的語句的退出狀態終止。
如果沒有匹配的模式,則case的退出狀態為零。否則,返回狀態是已執行語句的退出狀態。
如果使用預設的星號(*)模式,則在沒有匹配模式的情況下將執行它。
下面通過一些範例來了解這種機制:

範例1

在此範例中,定義了一個簡單的場景來演示case語句的用法。

Bash指令碼檔案:case-demo1.sh -

#!/bin/bash  

echo "Do you know Java Programming?"  
read -p "Yes/No? :" Answer  
case $Answer in  
    Yes|yes|y|Y)  
        echo "That's amazing."  
        echo  
        ;;  
    No|no|N|n)  
        echo "It's easy. Let's start learning from tw511.com."  
        ;;  
esac

執行上面範例程式碼,得到以下結果:
case語句

範例2

在此範例中,定義了一個組合case,其中還存在一個預設情況,即前面找不到匹配的case

Bash指令碼檔案:case-demo2.sh -

#!/bin/bash  

echo "Which Operating System are you using?"  
echo "Windows, Android, Chrome, Linux, Others?"  
read -p "Type your OS Name:" OS  

case $OS in  
    Windows|windows|window|win)  
        echo "That's common. You should try something new."  
        echo  
        ;;  
    Android|android)  
        echo "This is my favorite. It has lots of applications."  
        echo  
        ;;  
    Chrome|chrome)  
        echo "Cool!!! It's for pro users. Amazing Choice."  
        echo  
        ;;  
    Linux|linux)  
        echo "You might be serious about security!!"  
        echo  
        ;;  
    *)  
        echo "Sounds interesting. I will try that."  
        echo  
        ;;  
esac

執行上面範例程式碼,得到以下結果:

Base case示例2