Shell系列(10) - 多条件判断case语句

404 阅读2分钟

「4月日新计划更文活动」

case语句

运行方式

  • case ... esac为多选择语句,属于一种多分支选择结构,每个case分支用右边圆括号开始,在case语句中会将variable的值与模式中的每个值相比较,如果过与某个value的值相等,则执行该value所对应的一组语句,当遇到;;则跳出case语句,如果没有任何一个值与variable相匹配,则执行*后面的一组语句

语句格式

case variable  in
    模式1)
        command1;;
    模式2|模式3)
        command2;;
    *)
        default_command;;
esac

变量名

  • 在case语句中,variable通常是一个变量,然而它通常是需要被匹配的参数或用户输入

模式

  • case语句中的模式,用于匹配变量名的取值。模式可以是简单的字符串,也可以是复杂的正则表达式,举例:
    • *匹配任意文字,包括空白字符
    • 匹配任意单个字符
    • [...]匹配方括号中任意一个字符

Command

  • case语句中的command,即为满足匹配模式时需要执行的命令,可以有多个,但是必须要以分号;;隔开

Default command

  • 在case语句中,只有当所有模式都不匹配,才会执行最后一个*后面的默认命令
#!/bin/bash

# 读取用户输入并保存到变量name中
echo "请输入你的名字:"
read name

# case语句开始
case $name in
    John)
        echo "你好,John!";;
    Mary|Marylin)
        echo "你好,Mary/Marylin!";;
    [A-Z]*)
        echo "你的名字以大写字母开头!";;
    [a-z]*)
        echo "你的名字以小写字母开头!";;
    *)
        echo "很遗憾,我不认识你!";;
esac

# 脚本结束
echo "感谢使用本脚本!"

注意

  • 对于变量名variable,可以使用双引号,也可以不使用
  • 每个case子句中的条件测试部分,都以右括号")"结束
  • 每个case子句都以一对分号“;;”作为结束符。
  • 在脚本执行的过程中,当遇到一对分号时,会跳过当前case子句后面的所有的case子句,包括*所对应的子句,执行esac子句后面的其他的语句。
  • case语句结构以esac结尾。与fi结尾一样,都是以前面一个单词的所有字母的逆序排列作为结束标记。