Bash case 条件分支

case 将一个值依次与多个模式匹配,并执行第一个匹配分支。它适合处理命令参数、菜单选项和有限状态。

基本语法

case "$value" in
  pattern_1)
    commands
    ;;
  pattern_2|pattern_3)
    commands
    ;;
  *)
    default_commands
    ;;
esac
  • 模式使用 Shell 的模式匹配语法,不是正则表达式。
  • | 可以在一个分支中连接多个模式。
  • * 通常作为最后的默认分支。
  • ;; 结束当前分支,随后退出整个 case

处理命令参数

#!/usr/bin/env bash
 
case "${1-}" in
  start)
    echo "启动"
    ;;
  stop)
    echo "停止"
    ;;
  status)
    echo "查看状态"
    ;;
  "")
    echo "缺少参数:start、stop 或 status" >&2
    exit 2
    ;;
  *)
    printf '未知参数:%s\n' "$1" >&2
    exit 2
    ;;
esac

${1-} 在没有第一个位置参数时展开为空字符串,也能配合 set -u 使用。

匹配多个写法

read -r -p "是否继续?[y/N] " answer
 
case "$answer" in
  y|Y|yes|YES)
    echo "继续"
    ;;
  *)
    echo "取消"
    ;;
esac

公开笔记中不应硬编码真实服务器地址、账号或密钥路径。需要简化 SSH 连接时,优先在本地使用 ~/.ssh/config 管理主机别名。

参考资料