Shell脚本10 -- case分支控制

声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell编程(8) until循环以及函数基本创建调用】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。


在 Linux Shell 脚本中,case 语句是处理多分支条件的一种高效工具。相比于多重 if-elif-else 语句,case 语句在处理多个条件时更加清晰和易读。本文将详细讲解 case 语句的语法、用法以及实际应用示例。


1 什么是 case 语句?

case 语句是一种用于模式匹配的分支控制结构,它根据变量的值匹配不同的模式,并执行对应的代码块。它的主要特点是简洁、直观,适用于条件较多的场景。

基本语法:

case 变量 in
    模式1)
        命令块1
        ;;
    模式2)
        命令块2
        ;;
    *)
        默认命令块
        ;;
esac

说明:

  • 变量 是待匹配的值。
  • 每个 模式 后面跟着一个右括号 )
  • 命令块 是模式匹配时执行的命令。
  • 每个分支以 ;; 结束。
  • * 表示默认匹配模式(类似于 else),当没有模式匹配时执行该命令块。
  • esac 表示 case 语句的结束。
#!/bin/bash

read -p "请您输入一个数值:" num

case $num in 
	1)echo "您输入的数字是1"
	;;
	2)echo "您输入的数字是2"
	;;
	3)echo "您输入的数字是3"
	;;
	*)echo "您输入的是其他数字"
	;;
esac

运行结果: 当用户输入 1 时:

您输入的数字是1

当用户输入 100 时:

您输入的是其他数字

2 使用场景

case 语句广泛用于:

  • 用户输入处理,如命令行参数解析。
  • 系统任务的模式匹配,如处理文件扩展名。
  • 服务控制脚本,提供多选项功能。

3 示例

以下是几个典型的 case 语句示例,展示了它在不同场景中的应用。

3.1 基本用户输入处理

以下代码实现一个简单的用户菜单,根据用户输入执行不同操作:

#!/bin/bash

echo "Select an option:"
echo "1. Show date"
echo "2. List files"
echo "3. Show current directory"
echo "4. Exit"

read -p "Enter your choice: " choice

case $choice in
    1)
        echo "Today's date is: $(date)"
        ;;
    2)
        echo "Files in the current directory:"
        ls
        ;;
    3)
        echo "Current directory is: $(pwd)"
        ;;
    4)
        echo "Exiting script. Goodbye!"
        exit 0
        ;;
    *)
        echo "Invalid option. Please try again."
        ;;
esac

运行结果: 当用户输入 1 时:

Today's date is: Mon Nov 25 10:00:00 UTC 2024

3.2 处理文件扩展名

以下脚本根据文件扩展名执行不同操作:

#!/bin/bash

read -p "Please enter a file name: " file

case $file in
    *.txt)
        echo "This is a text file."
        ;;
    *.jpg|*.png)
        echo "This is an image file."
        ;;
    *.sh)
        echo "This is a shell script file."
        ;;
    *)
        echo "Unknown file type."
        ;;
esac

解释:

  • *.txt 匹配所有以 .txt 结尾的文件。
  • *.jpg|*.png 同时匹配 .jpg.png 文件。
  • * 匹配任何未定义的文件类型。

3.3 服务控制脚本

以下脚本模拟服务的启动、停止和状态查询功能:

#!/bin/bash

case $1 in
    start)
        echo "Starting service..."
        # service start command here
        ;;
    stop)
        echo "Stopping service..."
        # service stop command here
        ;;
    status)
        echo "Checking service status..."
        # service status command here
        ;;
    restart)
        echo "Restarting service..."
        # service restart commands here
        ;;
    *)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
        ;;
esac

运行:

$ ./script.sh start
Starting service...

4 注意事项

  1. 匹配顺序case 会从上到下依次匹配模式,遇到第一个符合的模式后执行对应命令块并跳出语句。
  2. 防止遗漏模式:建议始终添加 * 分支,处理所有未匹配的情况。
  3. 多模式合并:用 | 符号将多个模式合并处理,例如 *.jpg|*.png
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值