Shell脚本10 -- case分支控制

shell脚本流程控制语句(if、for、while、case) if、for、while、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。
【Linux】shell脚本实战-流程控制语句case 文章目录前言什么是case语句case语句语法分析case实战案例1. 做出你的选择2. 早饭吃什么3. apache服务启动脚本实战总结 前言 前面我们探讨过shell脚本中的if语句,单分支,双分支以及多分支的写法,今天我来看另一个流程控制语句case。 什么是case语句 控制语句:用来实现对程序流程的选择、循环、转向和返回等进行控制; case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以 阅读详情

相关推荐

避开集成插件!手把手教你用URL登录实现Finereport与致远OA的无缝跳转

本文详细介绍了如何通过URL登录机制实现Finereport与致远OA的无缝跳转,无需复杂插件配置。文章涵盖用户体系同步、环境配置、URL登录核心设置及安全加固方案,特别适合企业数字化转型中BI工具与OA系统的轻量化集成需求。

weixin_29215815的博客 74

四、流程控制之条件判断

8、编写脚本choice8.sh,根据用户输入字符,判断是纯数字、纯字母、数字和字母、符号、其它。3、编写脚本choice3.sh,判断系统内存剩余容量大小,若低于100M则发送消息进行告警。1、编写脚本choice1.sh,判断当前脚本的执行者,若不是root账户则提示,并退出。7、编写脚本choice7.sh,根据用户输入一个字符,判断是数字、字母、其它字符。2、编写脚本choice2.sh,利用单分支结构实现输入2个整数,输出最大值。60-69 合格–C。60分以下不合格–D。

如果喜欢的话,点个赞吧~ 56

单片机通识之UART通信协议(如何用汇编实现)

使用汇编实现UART通信

smart_num_1的博客 996

[Shell编程学习路线]——shell脚本中case语句多分支选择详解

在Shell编程中,处理多种条件判断和选择是编写脚本时经常遇到的需求。虽然if-else语句可以实现条件分支,但当条件较多时,代码会变得繁琐且不易维护。此时,case语句作为一种强大的多分支选择工具,提供了更加简洁和高效的解决方案。本篇文章将详细介绍Shell编程中的case语句,帮助你掌握其基本语法、应用场景及注意事项,从而提升脚本编写的灵活性和可读性。无论你是Shell编程的新手,还是有一定经验的开发者,相信通过本篇文章的学习,你都能在实际项目中更好地运用case语句。

博客之路,前途漫漫 2290

WRF移动嵌套结合伏羲模型与CFD(PALM)高精度多尺度降尺度分析研究

WRF移动嵌套(Moving Nesting):动态调整高分辨率嵌套网格位置,追踪天气系统(如台风、强对流系统)以提高局地预报精度。伏羲(Fuxi)模型:国产数值模式,提供对WRF模拟的初始及边界条件优化。CFD(Computational Fluid Dynamics)PALM模型:精细化局地流场、湍流、温度分布。

m0_57411304的博客 1710

从零构建基于ZYNQ与AD9361的SDR信号源:FPGA逻辑与射频前端的协同设计

本文详细介绍了从零开始构建基于ZYNQ与AD9361的SDR信号源的完整流程。通过解析FPGA逻辑与射频前端的协同设计,重点阐述了如何利用FPGA生成基带信号,并通过ARM处理器配置AD9361,最终实现一个可编程的2.4GHz载波信号发生器。内容涵盖硬件选型、Vivado环境搭建、AXI总线通信、LVDS接口设计及软件驱动开发,为SDR开发者提供了实用的实战指南。

weixin_29200485的博客 214

【Linux】Shell 脚本中的 case 分支语句

本文介绍了Shell脚本中case语句的语法结构、优势特点及实际应用场景。通过对比Java的switch语句,帮助开发者快速理解case语句的用法。文章重点讲解了case语句支持通配符匹配的核心优势,并提供了文件类型判断和交互式菜单系统两个实战案例,展示case语句在Shell脚本编程中的灵活应用。最后通过mermaid流程图直观呈现case语句的执行逻辑,便于开发者掌握这一重要分支控制结构。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

shell(四)——case分支与函数

摘要:本文系统介绍了编程中的两个核心概念 - case分支和函数。case分支是多路选择控制结构,通过示例展示了其在C、Java、JavaScript中的实现方式,重点讲解了break语句、default分支等关键特性。函数部分阐述了其作为独立代码块的三要素(定义、调用、参数传递),并以加法函数为例说明基本用法。 两者的协作关系体现在:函数内部使用case分支处理多种情况,case分支调用不同函数执行具体任务。这种组合提升了代码的复用性、清晰度和可维护性。文章还总结了最佳实践,如合理使用default分支、

liuxinshuang0512的博客 882

《Android最全面试题-Offer直通车》目录

如今Android求职是僧多粥少,竞争非常激烈,企业招聘时要求很高,本专栏汇聚android面试各种考点,各大公司Android面试题,《Android 最全面试题》将助你全方位提升,助您脱颖而出,早日拿到满意Offer。本专栏汇聚了海量优质内容,文章数量超过100 篇。凭借过硬的质量,每月新增订阅用户数以百计,如今仅需特惠价 9.9 元,限时抢购,后续将逐步恢复原价,早订阅早开启逆袭之旅。精心筹备,整理出一系列超万字精华篇章,累计数十万的 Android 面试题深度剖析。

大模型大数据攻城狮的专栏 2860

为 ABAP BSP 与 ICF 量身打造的错误页实践:从 CX_ROOT 到 SICF 的端到端落地指南

摘要 本文系统讲解SAP ABAP平台中BSP与ICF层的错误页定制方法。在BSP层,通过标记错误页属性和绑定ERROR_OBJECT异常对象,实现友好的错误展示与日志记录。ICF层通过SICF事务码统一配置错误页、登录与登出逻辑,支持服务树继承。文章包含可直接落地的代码示例,并针对现代Fiori架构给出演进建议,帮助开发者提升用户体验与系统安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 223

Shell脚本(四)——case分支、函数和数组

本章将深入探讨三大核心要素:条件分支控制、函数化编程和数组数据处理。数组可以理解为是一个用来存放多个值的容器。数组中存储的数据,通常可以称为:元素。当数组中存储了多个元素后,就会给每一个元素添加一个编号(索引),从0开始注意:没有二维数组,也就是说不能像 arr[2][3] 这样用。echo "第一种数组定义方式:${arr1。

m0_51025466的博客 1097

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

shell脚本-循环、case语句,函数及中断控制

简介欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 ## 循环 ## 分支 #...

REVE_HOH的博客 1549

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Shell脚本条件 i f 语句、case语句

if语句 if开始fi结束 if 条件测试 then 命令 fi fi是结尾 双分支 if 条件测试 then命令1 else命令2 fi 多分支结构 case语句多分枝结构 (执行效率比if快,它直接去找相关的满足的条件,而if一条一条往下找,会慢一点) ...

weixin_44324367的博客 2172

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

shell脚本之if多分支和case分支语句

在Linux 系统中,/etc/rc.d/init.d 目录下绝大多数的系统服务脚本使用了 case 分支语句,平时控制各种系统服务时,提供的 start、stop、restart等位置参数,正是由 case 语句结构来识别并完成相应操作的!

潇潇雨歇 2318

case语句、case分支应用示例、函数及中断控制、字符串截取、替换、删除

case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就执行相应的一组操作,如果没有任何值能够匹配,就执行预先设置的默认操作。在Shell脚本中,将一些需重复使用的操作,定义为公共的语句块,即可称为函数。通过使用函数,可以使脚本代码更加简洁,增强易读性,提高Shell脚本的执行效率。直接使用“函数名”的形式调用,如果该函数能够处理位置参数,则可以使用“函数名 参数1 参数2 .. ..”的形式调用。

fmj121030的博客 2124

超详细!!!Linux:利用Shell脚本使用case分支语句

case分支语句case 语句case语句主要适用情况case分支语句语法结构case值得注意的特点case语句应用示例1)检查用户输入字符类型2)编写系统服务脚本 case 语句 case语句主要适用情况 某个变量存在多种取值 需要对其中的每一种取值分别执行不同命令序列 case 这种情况与多分支的if语句非常难相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值 case分支语句语法结构 case 分支语句的语法结构如下所示 case 变量值 in 模式 1)

weixin_48191060的博客 6397

shell——基于case分支编写服务脚本

基于case分支编写服务脚本 问题 本案例要求编写myprog服务脚本,相关要求如下: 能支持start、stop、restart等控制参数 控制参数通过位置变量$1传入 能通过chkconfig命令来管理此服务 服务操作为sleep进程的开启/关闭/重启 方案 case分支属于匹配执行的方式,它针对指定的变量预先设置一个可能的取值,判断该变量的实际取值是否与预设的某一个值相匹配,如果匹配上了,就...

秦庚辰的博客 216

十、Linux Shell脚本:流程控制语句

要让脚本从简单的“指令清单”升级为能干的“小助手”,就需要用if教它根据条件做判断,用for和while循环让它重复处理任务,再用case语句帮它在多个选项中做出清晰的选择

专注于 Agent 工程、AI 产品、Harness Engineering、LLM 算法等方向,OpenMathModel、Nivik 等开源项目作者 7万+

Shell脚本编程之case语句与循环语句

case语句的执行流程:首先“变量值”与模式1进行比较,若取值相同则执行模式1后面的命令序列,直到遇见“;”后跳转至esac,表示结束分支;然后将列表中的第2个取值赋值给变量,并执行循环体中的命令序列....以此类推,直到列表中的所有取值用完,最后将跳至done语句,表示结束循环。为避免编写的脚本出错,除了在编写脚本时注意书写规范,排除语法错误,更重要的是利用调试脚本工具来调试脚本。echo命令是最有用的调试脚本工具之一,一般在可能出现问题的脚本中加入echo命令,采用的是分段排查的方式。

qq_73611706的博客 1772

shell 脚本和case例子

转自:http://hlee.iteye.com/blog/577628<br /><br />  <br /> case和select结构在技术上说并不是循环, 因为它们并不对可执行代码块进行迭代. 但是和循环相似的是, 它们也依靠在代码块顶部或底部的条件判断来决定程序的分支. <br /><br /> 在代码块中控制程序分支 <br /><br /> case (in) / esac <br /><br />     在shell中的case结构与C/C++中的switch结构是相同的.

fuli1215的专栏 2万+

shell脚本:case流程控制简单案例

case 执行流程: 首先使用变量值与数值1进行比较,若取值相同则执行数值1后的命令序列,直到遇见双分号;; 后跳转至esac,表示分支结束;若与数值1不相匹配,则继续与数值2 进行比较,若取值相同则执行数值2 后的命令序列,直到遇见双分号;; 后跳转至esac,表示结束分支,……依次类推,若找不到任何匹配的值,则执行默认模式*) 后的命令序列,直到遇见esac后结束分支。 格式: case 变...

平庸 1090

case 分支语句的使用

Case语句主要适用于:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况和多分支if语句非常相似。只不过if要判断多个不同的条件而case语句只判断一个变量的不同取值。 Case语句的结构 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; 。。。。。。。。。。。。。 *) 默认命令序列 esac 在上述结构中,关键字case后面跟的是“变量值”,即“$变量名”,这点需要与for循环语句的机构...

weixin_47763101的博客 1623

shell脚本--分支语句之if、case

分支语句一般用if或者case。下面直接以一个简单的shell程序来演示if和case的用法。 (1)if用法 案例:程序参数为一个用户名,判断参数的个数,如果参数不是1个,提示用户参数个数不正确,否则,判断该用户是否存在,如果存在,则输出用户的id,如果不存在,先创建用户再输出该用户的id。 #!/bin/bash # 程序参数为用户名, # 如果参数个数为1,则输出该用户的id # ...

Andy_Hanna的专栏 357

shell脚本case分支语句

Case语句 Case语句主要适用于:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况和多分支if语句非常相似。只不过if要判断多个不同的条件而case语句只判断一个变量的不同取值。 Case语句的结构 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; 。。。。。。。。。。。。。 *) 1 #!/bin/bash read -p “请输入一个字符,并按enter确认:” KEY case “$KEY” in [a-z]|[A-Z]) echo

cslileijie的博客 213
上一篇: Shell脚本9 -- until循环
下一篇: Shell脚本11 -- 函数
?crying
博客等级 码龄7年 449粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值