Linux中case语句用|连接多个模式实现单变量值匹配,支持字符串组合、字符类、通配符等灵活语法,常用于命令行参数分发,需注意空格、括号、;;及兜底分支等关键细节。

Linux 中用 case 语句匹配多个选项,核心是用竖线 | 连接多个模式,实现“任一满足即执行”的逻辑。它不是逐个判断布尔条件,而是对单个变量做值或模式匹配,简洁高效,特别适合命令行参数、用户输入、文件类型等场景。
用 | 组合多个字符串选项
当几个固定字符串代表同一操作时(比如接受大小写或缩写),把它们用 | 写在同一个分支里:
-
"start"|"START"|"s"|"S")—— 匹配任意一种启动指令写法 -
"yes"|"YES"|"y"|"Y"|"true"|"TRUE")—— 常用于确认类交互 - 注意:每个模式必须是独立字符串,不能写成
"start|START"(那是正则,case不认)
用字符类和通配符扩展匹配范围
比纯字符串更灵活,能覆盖连续取值或模糊输入:
-
[yY]|[yY][eE][sS])—— 先匹配单个 y/Y,再匹配 yes/YES 等组合 -
[0-9]|"help"|"h")—— 同时接受一位数字或 help/h -
*.log|*.txt)—— 匹配以 .log 或 .txt 结尾的任意文件名 -
[a-z][a-z]*)—— 匹配至少两个小写字母开头的字符串(如 "abc", "xy")
处理命令行参数的典型写法
脚本常通过 $1 接收第一个参数,用 case 分发行为:
"-h"|"--help") echo "用法: $0 {start|stop|restart}"; exit 0 ;;"start"|"up") systemctl start nginx ;;"stop"|"down") systemctl stop nginx ;;"*") echo "错误:不支持 '$1'"; exit 1 ;;
容易忽略的关键细节
语法容错性低,几个符号位置错就报错:
-
case和变量之间必须有空格,不能换行;in必须紧贴变量后,也不能换行 - 每个模式后必须有右括号
),漏了会直接报语法错误 - 每个分支结尾必须是
;;,不是;或换行 - 建议始终加上
*)分支兜底,避免意外输入导致静默失败


















