Shell case 语句

case 是 Shell 脚本中用于 多条件分支匹配 的控制结构,比 if-elif-else 更简洁,适用于模式匹配(如字符串、数字、通配符等)。


1. case 基本语法

case "$变量" in
  模式1)
      命令1
      ;;
  模式2)
      命令2
      ;;
  *)
      命令N
      ;;
esac

示例

[root@lichu ~]# vim grade_check_case.sh
#!/bin/bash

# 提示用户输入成绩
read -p "请输入成绩(0-100):" score

# 检查输入是否为数字
if ! [[ "$score" =~ ^[0-9]+$ ]]; then
    echo "错误:请输入有效的数字!"
    exit 1
fi

# 使用 case 判断成绩等级
case $score in
    9[0-9]|100)   # 90-100
        echo "成绩等级:A(优秀)"
        ;;
    8[0-9])       # 80-89
        echo "成绩等级:B(良好)"
        ;;
    7[0-9])       # 70-79
        echo "成绩等级:C(中等)"
        ;;
    6[0-9])       # 60-69
        echo "成绩等级:D(及格)"
        ;;
    [0-9]|[1-5][0-9])  # 0-59
        echo "成绩等级:F(不及格)"
        ;;
    *)            # 无效输入
        echo "错误:成绩必须在 0-100 之间!"
        ;;
esac

2. 模式匹配规则

模式说明
abc精确匹配字符串 abc
yes|y匹配 yesy| 分隔)
[0-9]匹配单个数字
*匹配任意字符

3. 运维实战案例

案例 1:根据服务名管理服务

[root@lichu ~]# vim manage_services.sh
#!/bin/bash

service="$1"

case "$service" in
    nginx|httpd)
        echo "管理Web服务: $service"
        systemctl restart "$service"
        ;;
    mysql|mariadb)
        echo "管理数据库服务: $service"
        systemctl status "$service"
        ;;
    *)
        echo "未知服务: $service"
        ;;
esac

[root@lichu ~]# ./manage_services.sh nginx  # 管理Web服务
[root@lichu ~]# ./manage_services.sh mysql  # 管理数据库服务

案例 2:根据文件扩展名处理文件

[root@lichu ~]# vim process_files.sh
#!/bin/bash

file="$1"

case "$file" in
    *.tar.gz|*.tgz)
        echo "解压 tar.gz 文件: $file"
        tar -xzf "$file"
        ;;
    *.zip)
        echo "解压 zip 文件: $file"
        unzip "$file"
        ;;
    *.sh)
        echo "执行 Shell 脚本: $file"
        bash "$file"
        ;;
    *)
        echo "不支持的文件类型: $file"
        ;;
esac

[root@lichu ~]# ./process_files.sh backup.tar.gz  # 解压tar.gz
[root@lichu ~]# ./process_files.sh install.sh     # 执行脚本

案例 3:系统工具箱(交互式菜单)

[root@lichu ~]# vim sys_toolkit.sh
#!/bin/bash

echo "1. 检查磁盘空间"
echo "2. 检查内存使用"
echo "3. 检查网络连接"
read -p "请选择操作 (1-3): " choice

case "$choice" in
    1)
        df -h
        ;;
    2)
        free -h
        ;;
    3)
        ping -c2 baidu.com
        ;;
    *)
        echo "无效输入!"
        exit 1
        ;;
esac

案例 4:根据操作系统类型安装软件

[root@lichu ~]# vim install_nginx_case.sh
#!/bin/bash
# 脚本名称: install_nginx_case.sh
# 功能: 自动检测系统类型并安装Nginx
# 使用方法: sudo ./install_nginx_case.sh

# 检查root权限
if [ "$(id -u)" != "0" ]; then
    echo "错误: 必须使用root用户或sudo运行此脚本"
    exit 1
fi

# 检测系统类型
if [ -f /etc/redhat-release ]; then
    OS_TYPE=centos
elif [ -f /etc/lsb-release ]; then
    OS_TYPE=ubuntu
else
    OS_TYPE=other
fi

# 使用case语句选择安装方式
case $OS_TYPE in
    centos)
        echo "[INFO] 检测到CentOS/RHEL系统,使用yum安装Nginx..."
        yum install -y epel-release
        yum install -y nginx
        systemctl start nginx
        systemctl enable nginx
        ;;
    ubuntu)
        echo "[INFO] 检测到Ubuntu系统,使用apt安装Nginx..."
        apt-get update
        apt-get install -y nginx
        systemctl start nginx
        systemctl enable nginx
        ;;
    *)
        echo "[ERROR] 不支持的操作系统: $OS_TYPE"
        exit 1
        ;;
esac

# 验证安装[可选]
if which nginx &>/dev/null; then
    echo -e "\n[SUCCESS] Nginx安装成功!"
    echo -e "Nginx版本信息:$(nginx -v 2>&1 | awk -F"/" '{print $2}')"
    echo -e "服务状态:"
    systemctl status nginx | grep -E "Active:|Loaded:"
    echo -e "\n请通过浏览器访问服务器IP验证Nginx是否正常运行"
else
    echo "[ERROR] Nginx安装失败"
    exit 1
fi

💡 感谢你读到这里!这篇《Shell case 语句》是我的用心分享,如果你觉得有收获,不妨:


点个「赞」或「分享」,让更多同路人相遇


🔍 关注我的博客,持续接收技术/成长类干货


💬 文末留言聊聊你的想法,或遇到的同类问题~


🔒 本文为原创,转载请保留原文链接(https://www.lichu228.top/archives/394)与作者信息,感谢尊重与支持!


🌐 想找更多优质内容?点击进入博客主页探索吧~


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇