声明:
本文的学习内容来源于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 注意事项
- 匹配顺序:
case会从上到下依次匹配模式,遇到第一个符合的模式后执行对应命令块并跳出语句。 - 防止遗漏模式:建议始终添加
*分支,处理所有未匹配的情况。 - 多模式合并:用
|符号将多个模式合并处理,例如*.jpg|*.png。
2895

被折叠的 条评论
为什么被折叠?



