Bash 中 Case 语句用法

在 Bash 中,当您有多个不同的选择时, case 语句通常用于简化复杂的条件。 使用 case 语句而不是嵌套的 if 语句将帮助您使 bash 脚本更易读,更易于维护。

Bash 中的 case 语句与 Javascript 或 C 中的 switch 语句具有类似的概念。与 C 中的 switch 语句不同主要在于, Bash 中的 case 语句一旦找到一个并执行与该模式关联的语句,就不会继续搜索模式匹配。

在本教程中,我们将介绍 Bash 案例语句的基础知识,并向您展示如何在 shell 脚本中使用它们。

Case 语句语法

Bash 中的 case 语句采用以下形式:

case EXPRESSION in

  PATTERN_1)
    STATEMENTS
    ;;

  PATTERN_2)
    STATEMENTS
    ;;

  PATTERN_N)
    STATEMENTS
    ;;

  *)
    STATEMENTS
    ;;
esac
  • 每个 case 语句都以 case 关键字开头,后面跟 case 表达式和关键字开头 in ,该语句以esac关键字结尾。
  • 您可以使用由 | 运算符分隔的多个模式。该 ) 运营商终止模式列表。
  • 模式可以包含特殊字符
  • 模式及其相关命令称为子句。
  • 每个子句必须以 ;;
  • 与 case 表达式相匹配的第一个模式中对应的命令会被执行。
  • 通常的做法是使用通配符星号(*)作为最终模式来定义默认情况。这个模式总是匹配所有的情况。
  • 如果没有匹配的模式,则返回状态为零。否则,返回状态是执行的命令的退出状态。

案例陈述示例

这里是一个在 bash 脚本中使用 case 语句的示例,该脚本会打印给定国家/地区的官方语言:

languages.sh

#!/bin/bash

echo -n "Enter the name of a country: "
read COUNTRY

echo -n "The official language of $COUNTRY is "

case $COUNTRY in

  Lithuania)
    echo -n "Lithuanian"
    ;;

  Romania | Moldova)
    echo -n "Romanian"
    ;;

  Italy | "San Marino" | Switzerland | "Vatican City")
    echo -n "Italian"
    ;;

  *)
    echo -n "unknown"
    ;;
esac

将以上自定义脚本另存为文件 languages.sh 并从命令行运行它。

bash languages.sh

该脚本将要求您输入国家/地区。例如,如果键入“Lithuania”,它将匹配第一个模式,并且 echo 将执行该子句中的命令。

该脚本将打印以下输出:

Enter the name of a country: Lithuania
The official language of Lithuania is Lithuanian

如果您输入的国家/地区与默认通配符星号符号之外的任何其他模式都不匹配,假设输入是阿根廷的话,该脚本将执行默认子句中 echo 命令。

Enter the name of a country: Argentina
The official language of Argentina is unknown

结论

到目前为止,您应该很好地理解如何编写 bash case 语句。它们通常用于从命令行将参数传递给 shell 脚本。例如,init 脚本使用 case 语句来启动,停止或重新启动服务。