2. case 命令

case 命令是根据 来匹配不同的多个样式中的一个,如果匹配成功,则执行样式对应的命令块。他主要用来简化 if 命令 的结构,同样可以实现多分支的执行路径。

case 命令似于 Python 语言中的 match 语句 和 C 语言中的 switch 语句。

官方语法

case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac

上述 中括号([ ])内部的数据是可选的。后面跟 ... 说明前面的可选项可以有零次、一次或多次。case 命令可以写在一行内,也可以写在多行便于编写者阅读程序。

将上述一行整理成多行,并用中文表达需要填充的部分,即成为如下语法:

语法格式:

case 字符串值 in 
    样式1[|样式2]... )
        命令块 ;;
    样式3[|样式4]... )
        命令块 ;;
    样式1[|样式2]... )
        命令块 ;;
esac

语法说明:

执行顺序说明

case 命令会根据 字符串值 去下面样式列表中找寻匹配的样式,如果样式匹配成功,则执行此样式对应的命令块后结束此 case 命令的执行。

示例:

写一个 Shell 程序 test_case.sh ,此程序输入一年中的月份(1~12),打印这个月是四季:春、夏、秋、冬中的那个季节。

写入程序如下:

#!/bin/bash

read -p "请输入月份: " SEASON

case $SEASON in
    1 | 2 | 3)
        echo "春季!"
        ;;
    4 | 5 | 6)
        echo "夏季!"
        ;;
    7 | 8 | 9)
        echo "秋季!"
        ;;
    10 | 11 | 12)
        echo "冬季!"
        ;;
    *)
        echo "您输入的月份有误!"
        ;;
esac

运行结果:

weimingze@mzstudio:~$ bash test_case.sh
请输入月份: 12
冬季!
weimingze@mzstudio:~$ bash test_case.sh
请输入月份: 2
春季!
weimingze@mzstudio:~$ bash test_case.sh
请输入月份: 999
您输入的月份有误!

退出状态

case 命令的退出状态是最后执行的命令的退出状态。

练习:

写一个 Shell 脚本程序 score_range.sh 来输入一个学生的成绩等级,并输出这个等级的分数范围。

#! /bin/bash
# 输入一个学生的成绩等级(A、B、C、D),输出这个等级所在的分数范围:

# 输入 A: 输出 90-100。
# 输入 B: 输出 80-89。
# 输入 C: 输出 60-79。
# 输入 D: 输出 0-59。
# 如果输入不是上述选项,则输出 "Invalid Level!"。