Bash case语句

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 zyiz.net."  
        ;;  
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