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 xuhuhu.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


上一篇: Bash else-If語句 下一篇: Bash for迴圈