Bash Case 语句语法和示例

2023-11-10

CASE 语句是 Bash 中强大的条件语句,允许您根据值列表测试变量。它是使用多个 if-then 语句的更简洁、更有效的替代方案。很多时候它是一个很好的替代品if-else 语句。您还可以使用它来处理命令行参数在 shell 脚本中。

在本文中,我们将向您介绍 Bash 中的 CASE 语句,并提供如何在 Bash 脚本中使用它的示例。

Bash 中 CASE 语句的语法

Bash 中 CASE 语句的语法如下:

1
2
3
4
5
6
7
8
9
10
case 表达in
  pattern1)
    命令1;;
  pattern2)
    命令2;;
  pattern3)
    命令3;;
  *)
    默认命令;;
esac

case 关键字指示 CASE 语句的开始,in 关键字将要测试的表达式与模式列表分开。每个模式都用括号括起来,后面是如果模式与表达式匹配则要执行的命令列表。双分号(;;)指示每个命令列表的结尾。这*)模式匹配与任何先前模式都不匹配的任何表达式,并且在这种情况下执行default_commands。

在 Bash 中使用 CASE 语句

当您想要将变量与可能值列表进行比较时,Bash 中的 CASE 语句特别有用。下面的示例展示了如何使用 CASE 语句来检查 $USER 环境变量的值:

1
2
3
4
5
6
7
8
case $USER in
  root)
    echo “您已以 root 身份登录。”;;
  ubuntu)
    echo “您已以 ubuntu 身份登录。”;;
  *)
    echo “您以未知用户身份登录。”;;
esac

在此示例中,正在测试的表达式是$USER环境变量。这些模式是可能的值$USER(root 和 ubuntu),默认模式是*)模式,匹配除 root 或 ubuntu 以外的任何值。

带有命令行参数的 CASE 语句

也可以使用CASE语句来处理命令行参数在 Bash 脚本中。下面的示例展示了如何使用 CASE 语句来处理不同的命令行选项:

1
2
3
4
5
6
7
8
9
10
11
12
while getopts "a:b:c:" opt; do
  case $opt in
    a)
      echo “选项 a 已通过参数 $OPTARG 传递”;;
    b)
      echo “选项 b 已通过参数 $OPTARG 传递”;;
    c)
      echo “选项 c 已通过参数 $OPTARG 传递”;;
    *)
      echo “无效选项:-$OPTARG”;;
  esac
done

在此示例中,getoptscommand 用于处理命令行选项。 case 语句用于处理每个选项(a、b 和 c)及其相应的参数。默认模式(*)用于处理任何无效选项。

带正则表达式的 CASE 语句

case语句中使用的正则表达式用方括号括起来([])。这是因为我们使用字符类来匹配不同类型的字符。这+第二个模式后面的符号用于匹配前一个模式的一次或多次出现(在本例中为小写字母)。正则表达式可能非常复杂,并且您可以在 Bash 中使用更多功能和选项来匹配模式。

下面是如何在 Bash 中将正则表达式与 case 语句结合使用的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
 
read -p “输入一个字符串:” str
 
case $str in
  [a-z][0-9])
    echo “该字符串以小写字母开头,以数字结尾。”
    ;;
  [A-Z][a-z]+)
    echo “该字符串以大写字母开头,后跟小写字母。”
    ;;
  [0-9]+)
    echo “该字符串仅包含数字。”
    ;;
  *)
    echo “该字符串与任何模式都不匹配。”
    ;;
esac

在此示例中,我们使用正则表达式来匹配不同模式的字符串。第一个模式匹配以小写字母开头并以数字结尾的字符串,例如 a1、b2 等。第二个模式匹配以大写字母开头、后跟一个或多个小写字母的字符串,例如 Hello、World 等。第三个模式匹配仅包含数字的字符串,例如 123、4567 等。默认模式匹配与任何先前模式都不匹配的任何字符串。

当脚本运行时,它会提示用户输入一个字符串。然后使用 case 语句针对不同模式测试该字符串。如果模式匹配,则显示相应的消息。如果没有任何模式匹配,则显示默认消息。

结论

Bash 中的 CASE 语句是使用多个 if-then 语句的强大且高效的替代方案。它允许您根据可能值列表测试变量并根据匹配模式执行不同的命令。当您想要处理命令行参数或将变量与可能值列表进行比较时,CASE 语句特别有用。通过使用CASE语句,可以写得更加简洁易读

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash Case 语句语法和示例 的相关文章

  • 漏洞分析|Adobe ColdFusion 序列化漏洞(CVE-2023-29300)

    0x01 概述 近期 Adobe ColdFusion 发布了多个安全更新 引起了我们的关注 Adobe ColdFusion 是一款基于 Java 的商业应用程序服务器 2023 年 7 月 13 日 ProjectDiscovery 发
  • 定制化开发——时间轴组件

    文章目录 一 需求 二 思路 三 代码 3 1 第一版代码 3 2 改进 改进思路 改进说明 改进后代码 一 需求 1 开发一个展示轨迹数据用的时间轴组件 2 后端传入是一个 list 数据格式如下 const dataRalation e
  • ARM Mbed在线IDE编程意法半导体(ST)开发板

    硬件 软件 介绍 STM32F407发现板不直接支持MBED在线IDE 但是该板上的MCU也用于另一块官方MBED板上 Seeed Studio Arch Max v1 1 因此 可以通过将发现板当作Arch Max板进行编程 这是使用MB
  • 记录一次huawei sdk依赖 log4j导致,项目日志打印不正常的记录;log4j和Slf4j冲突导致tomcat日志不打印

    记录一次huawei sdk依赖 log4j导致 项目日志打印不正常的记录 log4j和Slf4j冲突导致tomcat日志不打印 问题描述 项目启动是发现日志中不打印tomcat启动日志 并且其实修改了 正常的日志 异常的日志 排查过程 虽
  • php 去除二维数组重复

    在 PHP 中 我们常常需要对数组进行处理和操作 有时候 我们需要去除数组中的重复元素 这里介绍一种针对二维数组的去重方法 以下是列举一些常见的方法 方法一 使用 array map 和 serialize 函数 array map 函数可
  • java Runtime打开文本文件和图片,网址,音频,视频和exe文件等

    java Runtime打开文本文件和图片 网址 音频 视频和exe文件等 exe文件 今天听课的时候 老师提到了这个Runtime 但是老师举例子的时候用的是这个QQ exe举例的 对于exe文件 我们只需要获得这个文本的绝对路径 然后用
  • MySQL · 特性分析 · MyRocks简介

    http mysql taobao org monthly 2016 08 03 RocksDB是facebook基于LevelDB实现的 目前为facebook内部大量业务提供服务 经过facebook大量工作 将RocksDB作为MyS
  • 【Python基础】在pandas中使用pipe()提升代码可读性

    1 简介 我们在利用pandas开展数据分析时 应尽量避免过于 碎片化 的组织代码 尤其是创建出过多不必要的 中间变量 既浪费了 内存 又带来了关于变量命名的麻烦 更不利于整体分析过程代码的可读性 因此以流水线方式组织代码非常有必要 图1
  • 打字侠:一款专业的中文打字网站

    打字侠第一个正式版发布啦 虽然离期望的样子还有一段路要走 不过能看到它正式发布 我还是很激动哟 打字侠是一款面向中学生和大学生的在线打字软件 它通过合理的课程设计和精美的图形界面帮助用户快速掌握盲打键盘的技巧 并提高打字效率 官方地址 he
  • sync/atomic - 原子操作

    sync atomic 原子操作 https github com polaris1119 The Golang Standard Library by Example blob master chapter16 16 02 md 对于并发
  • 23年新版 美团滑块 behavior _token

    逆向参数 behavior token Authencation f 一 behavior 加密位置 参数1 轨迹 参数2 request code 参数3 固定值 false 二 token 加密位置 参数1 固定值 false 参数2
  • P4355 [CERC2015] Kernel Knights

    P4355 CERC2015 Kernel Knights 题面翻译 骑术是一项中世纪的比赛 人们骑在马背上 在高速骑行时 试图用木制长矛互相攻击 总共有2n个骑士参加了一个激战锦标赛 来自两个主要竞争对手的N个骑士 到达后 每一个骑士都从
  • 基于Springboot+Vue社区志愿者管理平台

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • 二、Json对象、Json数组和Json字符串

    一 Json字符串和Json对象定义 本文中的示例采用的是 fastjson 1 定义 JSON就是一串字符串 只不过元素会使用特定的符号标注 JSONObject是一个 包裹起来的一个对象 Object 双括号表示对象 JSONArray
  • 2023/09/12 qt&c++

    实现一个图形类 Shape 包含受保护成员属性 周长 面积 公共成员函数 特殊成员函数书写 定义一个圆形类 Circle 继承自图形类 包含私有属性 半径 公共成员函数 特殊成员函数 以及获取周长 获取面积函数 定义一个矩形类 Rect 继
  • How to Use Advanced Similarity Rules to view similar case suggestions

    How to Use Advanced Similarity Rules to view similar case suggestions
  • SIM800C二次开发(EAT开发)------------(4)APP代码UART浅析

    上篇文章中使用的uart做了APP试验 今天对其代码做一下简单的分析 上代码 解析 一 文件中的结构体 app代码中需要加入APP CFG段 begin pragma arm section rodata APP CFG APP ENTRY
  • Outlook-VBA-05-自动获取邮件附件

    系统 Windows 10 软件 Outlook 2016 本系列讲讲在Outlook中使用VBA实现一些功能 今天讲讲如何将特定人员 特定主题的邮件的附件存储到本地 Part 1 场景描述 工作中 希望另外一方定期给自己分发一些报告 在本
  • [Pyhon大数据分析] 五.人民网新闻话题抓取及Gephi构建主题知识图谱

    该系列文章是Python大数据分析系列博客 包括网络爬虫 可视化分析 GIS地图显示 情感分析 舆情分析 主题挖掘 威胁情报溯源 知识图谱 预测预警及AI和NLP应用等 希望该系列文章对您有所帮助 前文分享了采用SnowNLP对微博话题进行
  • pb 制作程序运行报错界面

    一 运行程序时报错提示 1 gt 在应该程式里的systemerror returns none 如下代码 if err sys 1 then err sys 0 return else open w system error end if

随机推荐

  • QMessageBox使用方法

    提示 关于更多pyqt5内容请关注 QMessage 前言 一 QMessageBox介绍 二 使用步骤 1 引入库 2 QMessageBox的枚举类型 3 QMessageBox的对话框展示 1 critical消息对话框 2quest
  • 在pytorch中使用Tensorboard

    tensorboard是一种模型可视化工具 可以帮助我们实时查看深度学习模型数据 但它本身是为tensorflow量身定做 无法直接用于pytorch等其他深度学习框架 在这种情况下 出了TensorboardX 可以辅助tensorboa
  • C语言——简单的程序设计

    目录 前言 一 顺序结构程序 1 顺序程序结构介绍 2 顺序程序举例 二 选择结构程序 1 选择结构程序介绍 2 if语句的三种形式 1 第一种形式的if语句 2 第二种形式的if语句 3 第三种形式的if语句 3 switch语句 三 循
  • ARP协议

    一 ARP概述 如果要在TCP IP协议栈中选择一个 最不安全的协议 那我会毫不犹豫把票投给ARP协议 我们经常听到的这些术语 包括 网络扫描 内网渗透 中间人拦截 局域网流控 流量欺骗 基本都跟ARP脱不了干系 大量的安全工具 例如大名鼎
  • 5.2 分布式 Git - 向一个项目贡献

    5 2 分布式 Git 向一个项目贡献 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 27 初稿 目录 文章目录 5 2 分布式 Git 向一个项目贡献 版本说明 目录 向一个项目贡献 1 提交准则 Figure 57
  • 【数模】数据统计与分析中的随机数

    matlab里关于随机数的用法 随机数 matlab里关于随机数的用法 一 简单随机数 1 rand 生成 0 1 区间上均匀分布的随机变量 2 randn 生成服从标准正态分布 均值为 0 方差为 1 的随机数 二 较复杂随机数 需安装了
  • 【UnityShader自学日志】线框自发光着色器

    1 新建一个无光照着色器 Unlit Shader 重命名为 Unlit wire 2 修改其代码如下 Shader PACKT unlit wireframe1 Properties 线框着色器所需要的三个属性 Color Color C
  • Maven项目pom.xml配置文件中packaging标签的使用

    一 packaging标签可设置的值 指定打包类型使用标签 它默认是 jar 类型 1 pom 父类型都为pom类型 多用于微服务项目
  • IMU背包对动物行为影响测试

    动物行为是一种可观察和可测量的指标 轻量化和低成本的传感器技术的先进发展为研究人员提供了以最小干预来跨越空间和时间跟踪动物的机会 特别是对于家禽业来说 已经从传统的笼养系统转变为无笼养系统 许多技术可用于检测大群鸡的行为 活动和位置 为了有
  • 免费在线的redmine项目演示,提供免费三级域名

    免费在线的redmine项目演示 提供免费三级域名 提供在线的redmine最新版本的免费使用环境 支持免费的三级域名 申请地址 http m redmine org hostings new 申请成功之后 你的账户具有完整的redmine
  • Visual studio一个项目中多个源文件的单独调试运行

    问题描述 最近刷编程题 想在VS中一个项目中刷所有题目 但VS中一次只能一个包含main的源文件参与生成 不想为每个题目新建项目 很麻烦 解决方案 将其他不需要参加生成的包含main的源文件右键属性 从生成中排除 选 是 操作成功后 不需要
  • 编译原理-词法分析实验

    主要想保存一下实验代码 1 待分析的简单语言的词法 1 关键字 begin if then while do end 所有关键字都小写 2 运算符和界符 3 标识符 ID 整数型常数 NUM 通过正规式定义 4 空格 2 各个单词符号对应的
  • Fastjson 1.2.47反序列化漏洞复现

    目录 一 前期准备 二 fastjson简介 三 漏洞复现 一 创建文件 三 漏洞复现 二 反弹shell 一 前期准备 1 安装jdk 并配置环境 Kali安装JDK 1 8的详细过程 m0 54899775的博客 CSDN博客 2 安装
  • ZigZagPattern之字形图案算法的Java实现

    ZigZagPattern之字形图案算法的Java实现 ZigZagPattern 之字形图案 是一种常见的图案 其特点是呈蛇形排列 在这篇文章中 我们将介绍如何使用Java语言实现这个算法 并展示相应的源代码 首先 让我们来了解一下Zig
  • MySQL 连接池:增强性能的实际示例和策略

    数据库连接是任何应用程序的重要组成部分 因为它们促进应用程序和数据库之间的通信 然而 创建和管理连接可能会占用大量资源且耗时 特别是对于高流量应用程序 连接池是一种有效的技术 可以通过在多个客户端之间重用和共享数据库连接池来缓解这些挑战 通
  • 如何在 Linux Mint 上安装 NRPE 客户端

    NRPE Nagios 远程插件执行器 是一个允许您在远程 Linux 或 Unix 服务器上远程执行 Nagios 插件的工具 它使您能够监控远程主机的资源 例如 CPU 使用率 磁盘空间和其他性能指标 并将结果报告给中央 Nagios
  • CentOS 8 – 初始服务器设置

    使用本教程首次配置您的 CentOS 8 Linux 计算机 例如 您使用 CentOS 8 启动了新的 VPS 或专用主机 请按照以下步骤完成 CentOS 8 的初始服务器设置 第 1 步 登录 CentOS 8 登录到您的 CentO
  • 使用带有自动重启功能的 CRON 监控 Systemd 服务

    持续的服务可用性对于 Linux 系统的顺利运行至关重要 必须有一种机制可以检测服务何时关闭并自动重新启动它以最大限度地减少停机时间 在本文中 我们将讨论如何使用 cron 作业来监控服务状态并在服务关闭时自动重新启动服务 此外 我们还将介
  • 如何使用 JavaScript 检查复选框是否被选中

    本教程将帮助您使用 jQuery 编写 JavaScript 代码 该代码检查复选框是否已选中 并据此执行操作 这在提交任何表单之前检查是否选中任何复选框很有用 JavaScript 代码 下面是检查复选框 id checkBox1 是否被
  • Bash Case 语句语法和示例

    CASE 语句是 Bash 中强大的条件语句 允许您根据值列表测试变量 它是使用多个 if then 语句的更简洁 更有效的替代方案 很多时候它是一个很好的替代品if else 语句 您还可以使用它来处理命令行参数在 shell 脚本中 在