Appearance
case 语句
基本语法
bash
case variable in
pattern1)
commands
;;
pattern2)
commands
;;
*)
commands
;;
esac基本示例
简单匹配
bash
#!/bin/bash
fruit="apple"
case $fruit in
"apple")
echo "这是苹果"
;;
"banana")
echo "这是香蕉"
;;
"orange")
echo "这是橙子"
;;
*)
echo "未知的水果"
;;
esac数字匹配
bash
#!/bin/bash
num=3
case $num in
1)
echo "一"
;;
2)
echo "二"
;;
3)
echo "三"
;;
*)
echo "其他数字"
;;
esac模式匹配
使用通配符
bash
#!/bin/bash
file="document.txt"
case $file in
*.txt)
echo "文本文件"
;;
*.jpg|*.png|*.gif)
echo "图片文件"
;;
*.mp3|*.wav)
echo "音频文件"
;;
*)
echo "其他文件"
;;
esac使用 | 匹配多个模式
bash
#!/bin/bash
day="Monday"
case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "工作日"
;;
Saturday|Sunday)
echo "周末"
;;
*)
echo "无效的日期"
;;
esac使用范围
bash
#!/bin/bash
score=85
case $score in
[9][0-9]|100)
echo "优秀"
;;
[8][0-9])
echo "良好"
;;
[6-7][0-9])
echo "及格"
;;
*)
echo "不及格"
;;
esac命令行参数
处理选项
bash
#!/bin/bash
case $1 in
start)
echo "启动服务"
;;
stop)
echo "停止服务"
;;
restart)
echo "重启服务"
;;
status)
echo "查看状态"
;;
*)
echo "使用方法: $0 {start|stop|restart|status}"
exit 1
;;
esac处理多个参数
bash
#!/bin/bash
for arg in "$@"; do
case $arg in
-h|--help)
echo "帮助信息"
;;
-v|--version)
echo "版本 1.0"
;;
-d|--debug)
echo "调试模式"
;;
*)
echo "未知参数: $arg"
;;
esac
done交互式菜单
简单菜单
bash
#!/bin/bash
echo "请选择操作:"
echo "1) 创建文件"
echo "2) 删除文件"
echo "3) 查看文件"
echo "4) 退出"
read -p "请输入选项: " choice
case $choice in
1)
echo "创建文件"
;;
2)
echo "删除文件"
;;
3)
echo "查看文件"
;;
4)
echo "退出"
exit 0
;;
*)
echo "无效的选项"
exit 1
;;
esac循环菜单
bash
#!/bin/bash
while true; do
echo "请选择操作:"
echo "1) 创建文件"
echo "2) 删除文件"
echo "3) 查看文件"
echo "4) 退出"
read -p "请输入选项: " choice
case $choice in
1)
echo "创建文件"
;;
2)
echo "删除文件"
;;
3)
echo "查看文件"
;;
4)
echo "退出"
exit 0
;;
*)
echo "无效的选项"
;;
esac
echo
done文件类型判断
判断文件类型
bash
#!/bin/bash
file="$1"
if [ -z "$file" ]; then
echo "请提供文件名"
exit 1
fi
if [ ! -e "$file" ]; then
echo "文件不存在: $file"
exit 1
fi
case $(file -b "$file") in
*text*)
echo "文本文件"
;;
*directory*)
echo "目录"
;;
*executable*)
echo "可执行文件"
;;
*image*)
echo "图片文件"
;;
*archive*)
echo "压缩文件"
;;
*)
echo "其他文件"
;;
esac操作系统判断
判断操作系统
bash
#!/bin/bash
case $(uname -s) in
Linux*)
echo "Linux 系统"
;;
Darwin*)
echo "macOS 系统"
;;
CYGWIN*|MINGW*|MSYS*)
echo "Windows 系统"
;;
*)
echo "未知系统"
;;
esac实用示例
示例1:服务管理脚本
bash
#!/bin/bash
SERVICE_NAME="nginx"
case $1 in
start)
echo "启动 $SERVICE_NAME..."
systemctl start $SERVICE_NAME
;;
stop)
echo "停止 $SERVICE_NAME..."
systemctl stop $SERVICE_NAME
;;
restart)
echo "重启 $SERVICE_NAME..."
systemctl restart $SERVICE_NAME
;;
status)
echo "查看 $SERVICE_NAME 状态..."
systemctl status $SERVICE_NAME
;;
*)
echo "使用方法: $0 {start|stop|restart|status}"
exit 1
;;
esac示例2:备份脚本
bash
#!/bin/bash
case $1 in
full)
echo "执行完整备份..."
# 完整备份命令
;;
incremental)
echo "执行增量备份..."
# 增量备份命令
;;
differential)
echo "执行差异备份..."
# 差异备份命令
;;
*)
echo "使用方法: $0 {full|incremental|differential}"
exit 1
;;
esac示例3:日志级别处理
bash
#!/bin/bash
log_level="INFO"
case $log_level in
DEBUG|TRACE)
echo "调试日志"
;;
INFO|NOTICE)
echo "信息日志"
;;
WARNING|WARN)
echo "警告日志"
;;
ERROR|ERR|CRITICAL)
echo "错误日志"
;;
*)
echo "未知日志级别"
;;
esac示例4:颜色选择
bash
#!/bin/bash
echo "请选择颜色:"
echo "1) 红色"
echo "2) 绿色"
echo "3) 蓝色"
read -p "请输入选项: " choice
case $choice in
1|red|r)
echo "你选择了红色"
;;
2|green|g)
echo "你选择了绿色"
;;
3|blue|b)
echo "你选择了蓝色"
;;
*)
echo "无效的选择"
;;
esac最佳实践
1. 使用 | 匹配多个模式
bash
# 好的做法
case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "工作日"
;;
esac
# 不好的做法
case $day in
Monday)
echo "工作日"
;;
Tuesday)
echo "工作日"
;;
esac2. 使用通配符
bash
# 好的做法
case $file in
*.txt)
echo "文本文件"
;;
esac
# 不好的做法
case $file in
document.txt|file.txt|data.txt)
echo "文本文件"
;;
esac3. 添加默认情况
bash
# 好的做法
case $choice in
1)
echo "选项 1"
;;
2)
echo "选项 2"
;;
*)
echo "无效的选项"
;;
esac
# 不好的做法
case $choice in
1)
echo "选项 1"
;;
2)
echo "选项 2"
;;
esac总结
case 语句的关键点:
- 基本语法:
case variable in pattern) commands ;; esac - 模式匹配:使用通配符
*和? - 多模式匹配:使用
|分隔多个模式 - 范围匹配:使用
[start-end] - 默认情况:使用
*匹配所有其他情况 - 命令行参数:处理脚本参数
- 交互式菜单:创建用户友好的菜单
下一节我们将学习 select 语句的使用。