bash case语句

时间:2020-03-05 15:31:34  来源:igfitidea点击:

当我们有多种选择时,bash'case'语句通常用于简化复杂的条件。
使用'case'语句而不是嵌套的'if'语句将使bash脚本更具可读性,并且更易于维护。

Bash的“ case”语句与Javascript或者C的“ switch”语句具有相似的概念。
主要区别在于,与C'switch'语句不同,Bash'case'语句一旦找到与该模式相关联的已执行语句,就不会继续搜索该模式匹配。

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

'case'语句语法

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

case EXPRESSION in
  PATTERN_1)
    STATEMENTS
    ;;
  PATTERN_2)
    STATEMENTS
    ;;
  PATTERN_N)
    STATEMENTS
    ;;
  *)
    STATEMENTS
    ;;
esac
  • 每个'case'语句均以'case'关键字开头,后接case表达式和'in'关键字。该语句以“ esac”关键字结尾。
  • 我们可以使用以'|'分隔的多个模式运算符。 ')'运算符终止模式列表。
  • 模式可以具有特殊字符。
  • 模式及其相关命令称为子句。
  • 每个子句必须以';;'结尾。 。
  • 执行与匹配表达式的第一个模式相对应的命令。
  • 通常使用通配符星号(*)作为最终模式来定义默认大小写。此模式将始终匹配。
  • 如果没有匹配的模式,则返回状态为零。否则,返回状态是已执行命令的退出状态。

案例语句示例

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

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

将自定义脚本另存为文件,然后从命令行运行它。

bash languages.sh

该脚本将要求我们输入一个国家。
例如,如果键入“立陶宛”,它将匹配第一个模式,并且将执行该子句中的“ 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