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

2023-10-26

case 语句

case语句主要适用情况

  • 某个变量存在多种取值
  • 需要对其中的每一种取值分别执行不同命令序列
  • case 这种情况与多分支的if语句非常难相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值

case分支语句语法结构

  • case 分支语句的语法结构如下所示
case 变量值 in
模式 1)
	命令序列1
	;;
模式 2)
	命令序列2
	;;
	.......
*)
	默认命令序列
esac
  • 在上述语句结构中,关键字 case 后面跟着的是“变量值”,即“$变量名”,这点要和for循环的结构加以区别
  • 整个分支结构包括在case…esac 之间,中间的模式1,模式2,…,*对应为变量不同取值(程序期望的取值),其中 星号 作为通配符,可匹配所有值

case值得注意的特点

  • case行尾必须为单词"in",每一模式必须以右括号“)”结束
  • 双分号";;"表示命令序列结束
  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以用管道符号" | “表示或,如"A|B”.
  • 最后的 " *) " 表示默认模式,其中的 星号 相当于通配符
    在这里插入图片描述

case语句应用示例

  • 为了进一步理解case语句的结构和流程,掌握case语句在脚本中的实际使用,下面一次介绍2给脚本示例

1)检查用户输入字符类型

  • 提示用户从键盘输入一个字符,通过case语句判断该字符是否为字母,数字或者其他控制字符,并给出相应的提示信息
read -p "请输入一个字符,并按Enter键确定:" KEF
case "$KEY" in
 [a-z]|[A-Z])									//匹配任意字母
 	echo "您输入的是字母!"
 	;;
 [0-9])											//匹配任意数字
 	echo "您输入的是数字!"
 	;;
 *)												//默认模式,匹配任意字符
 	echo "您输入的是空格,功能键或其他控制字符。"
 esac

2)编写系统服务脚本

  • 编写一个名为myprog的系统服务脚本,通过位置变量$1指定的start,stop,restart,status控制参数,分别用来启动,停止,重启sleep进程,以及查看sleep进程的状态。其中,命令sleep用来指定暂停的秒数,这里仅用做测试,在实际云纹工作中应将sleep改为相应后台服务的控制命令序列。
case "$1" in
start)
	echo -n "正在启动sleep服务..."
	if sleep 7000 &
then												//在后台启动sleep进程
	echo "OK"
	fi
	;;
stop)
	echo -n "正在停止sleep服务..."
	pkill "sleep" &> /dev/null
	echo "OK"										//杀死sleep进程
	;;
status)
	if pgrep "sleep" &>/dev/null ; then				//判断并提示sleep进程状态

		echo "sleep服务已经启动"
	else
		echo "sleep服务已经停止"
	fi
	;;
restart)											//先停止,再启动服务
	$0 stop
	$0 start
	;;
*)													//默认显示用户信息
	echo "用法:$0 {start|stop|status|restart}"
esac

  • 测试命令为 ./myprog start

在这里插入图片描述

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

超详细!!!Linux:利用Shell脚本使用case分支语句 的相关文章

  • 是否可以使用数组中存储的关键字执行 grep 操作?

    是否可以使用存储在数组中的关键字执行 grep 操作 这是可能的代码片段 我该如何纠正它 args key1 key2 key3 cat file name while read line echo line grep q w args c
  • 在 bourne shell 中的用户定义函数中使用 getopts

    是否可以将命令行参数从 bourne 脚本内传递到函数中 以便允许 getopts 处理它们 我的脚本的其余部分很好地打包到函数中 但开始看起来我必须将参数处理移至主逻辑中 现在是这样写的 但是不行 processArgs while ge
  • 如何完善这个FTP(shell)功能?

    我有大量使用以下函数的脚本 Copies files over using FTP Configurations set at the beggining of the script param 1 FTP Host 2 FTP User
  • 包名中的“dev”后缀?

    使用 apt get 时 我看到一些软件包的名称后面有一个 dev 后缀 libreadline5 libreadline dev zlib1g zlib1g dev 这些到底是什么 我应该安装它们吗 你需要这些编译并链接因为它们提供了要链
  • 以非 root 用户身份在 UserData 中运行命令

    我正在尝试使用 EC2 UserData 脚本安装气流 我需要使用非 root 用户 ec2 user 运行一些命令 请参阅下面的脚本 UserData Fn Base64 Sub bin bash set xe Install GCC y
  • 执行 grails/groovy 时,Linux 上没有可用的控制台输出

    当执行 groovy 脚本或 grails 应用程序时 没有可用的输出 输入 gt 只有一个清晰的控制台屏幕 即使不启动 X Window System 输出也是不可见的 我也尝试过 grailscompile plain output 也
  • `/dev/urandom` 适合模拟目的吗?

    似乎在类 Unix 系统中使用纯 C fread from dev urandom是提取高质量随机字节的最简单方法 我需要运行一个每秒需要大约 10k 32 位随机数的模拟 并且可能会运行几天 是 dev urandom可以用于此目的吗 当
  • 如何将一个目录中的所有文件移动到多个具有给定文件数量的目录中?

    我有一个包含超过 27000 张图像的目录 我想将这些文件分成文件夹 每个文件夹包含大约 500 张图像 它们如何排序并不重要 我只是想将它们分开 一个 简单 的 find xargs 就可以了 find maxdepth 1 type f
  • 使用 Bash 比较 PHP 版本号?

    我有这个脚本 应该确保用户当前的 PHP 版本在某个范围内 尽管它应该可以工作 但某个地方有一个错误 使它认为版本超出范围 有人可以看一下并告诉我我能做什么来解决它 function version echo gawk F printf d
  • 如何在节点中转义 shell 命令的字符串?

    In nodejs http nodejs org 执行外部命令的唯一方法是通过 sys exec cmd 我想调用外部命令并通过标准输入为其提供数据 在nodejs中 似乎还没有一种方法可以打开命令 然后将数据推送到它 仅执行并接收其标准
  • 创建 QT 应用程序作为 Windows 上现有基于控制台的应用程序的 GUI

    我正在尝试使用 Qt 为现有应用程序设置一个 GUI 该应用程序旨在在 Windows 命令行中运行 这不仅仅是运行应用程序system 命令 但我需要通过命令行与现有应用程序交互 The system 当我启动现有的可执行文件时 命令会阻
  • elf .rel.text 部分中 R_386_32/R_386_PC32 的含义

    为了理解重定位的概念 我编写了一个简单的 chk c 程序 如下所示 1 include
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • x86-64 Linux 中不再允许使用 32 位绝对地址?

    64 位 Linux 默认使用小内存模型 将所有代码和静态数据置于 2GB 地址限制以下 这确保您可以使用 32 位绝对地址 旧版本的 gcc 对静态数组使用 32 位绝对地址 以便节省相对地址计算的额外指令 然而 这不再有效 如果我尝试在
  • 如何提供准备好的 git 提交消息?

    按照惯例 我在 git 中创建故事分支 以在其中包含 Jira 问题 ID 例如FOO 1001 我有一个脚本可以帮我做到这一点 现在 我准备了另一个脚本 用于从 Jira API 获取 FOO 1001 的标题 我想在输入时实现这一目标
  • find 命令的“exec”功能可以在后台启动程序吗?

    我想做这样的事情 find iname Advanced Linux Program exec kpdf 可能的 还有其他类似的方法吗 首先 它不会像你输入的那样工作 因为 shell 会将其解释为 find iname Advanced
  • 用于解析文件( csv )并逐行处理的 Shell 脚本[重复]

    这个问题在这里已经有答案了 您好 需要一个 shell 脚本来解析 csv 文件 逐行解析 然后逐个字段 该文件将如下所示 X1 X2 X3 X4 Y1 Y2 Y3 Y4 我需要提取这些 X1 X2 我写了一个脚本 但如果行超过一行 它就会
  • 在 Linux 上的 makefile 和 Makefile 之间进行选择

    我想在一个目录中同时使用 Makefile 和 makefile 进行 make 默认情况下 它将执行makefile 我可以选择执行 Makefile 吗 提前致谢 最简单的选择是使用 f make f Makefile From man
  • 缺少 /var/lib/mysql/mysql.sock 文件

    我正在尝试访问 mysql 当我运行 mysql 命令时 我得到以下信息 root ip 10 229 65 166 tpdatabase 1 8 0 28356 mysql 错误 2002 HY000 无法连接到 通过socket本地My
  • 让子进程等待直到收到父进程的信号

    我想从父级创建 N 个子级 我希望所有的孩子同时开始 一个功能 测量时间 因此 我将该函数放入信号处理程序中 当父级完成创建 分叉 所有子级时 它会向所有子级发送信号 使用kill children id 以让 make 开始 代码如下 但

随机推荐

  • (c语言实现)算法笔记之bfs及pta习题

    目录 一 bfs 广度优先搜索 的定义 二 bfs 广度优先搜索 的应用 三 题型训练 1 奇怪的电梯 2 寻宝 3 龙舌兰酒吧 四 总结 一 bfs 广度优先搜索 的定义 BFS 全称是 Breadth First Search 中文名是
  • 基于XMPP协议的Android即时通信系

    以前做过一个基于XMPP协议的聊天社交软件 总结了一下 发出来 设计基于开源的XMPP即时通信协议 采用C S体系结构 通过GPRS无线网络用TCP协议连接到服务器 以架设开源的Openfn e服务器作为即时通讯平台 系统主要由以下部分组成
  • react-router 里的 Link 标签和 a 标签有什么区别?

    相同点 从最终渲染的 DOM 来看 这两者都是链接 都是 a 标签 区别 是 react router 里实现路由跳转的链接 一般配合 a
  • 【代码记录】pytorch推理及与onnx推理精度对比

    1 pytorch推理 import cv2 import sys import numpy as np import torch os from torch import nn import torchvision models as m
  • 子串/子段问题总结

    1 一般子串问题 求一个串中满足某种条件的子串 1 如果所求子串的条件是一个值 比如sum 则考虑子段问题 注意这样一个性质 子段 前缀差 子段和 前缀和的差 vector
  • 4.3 链码的其它操作:实现对链码的打包升级

    目标 实现如何对链码打包签名 链码升级的实现 任务实现 链码部署除了正常的安装 实例化操作步骤之外 还有一种部署方式 即先将链码进行打包 然后对已打包的文件进行签名 最后再进行安装与实例的操作 4 3 1 链码打包及签名 4 3 1 1 打
  • final-期末大作业-制作AR射箭小游戏(Unity AR配置详细教程)

    要求 大作业要求 制作一款特定技术应用小游戏 并提交技术报告 内容 请参考以下技术主题 但不限于这些主题 运用手机拍若干全景图 贴到天空盒或球型天空 做一个简单校园漫游功能 粒子系统效果制作 必须带一个控制组件 控制粒子呈现效果 UI系统制
  • mysql 扁平结构设计_数组扁平化

    TOC 简介 数组的扁平化 就是将一个嵌套多层的数组 array 嵌套可以是任何层数 转换为只有一层的数组 举个例子 假设有个名为 flatten 的函数可以做到数组扁平化 效果就会如下 js var arr 1 2 3 4 console
  • Pycharm常用快捷键大全,初学友好,不怕记不住

    初来乍到 我是爱摸鱼的芝士呐 一 pycharm的简单介绍 字多可以跳过 pycharm是全宇宙最适合Python的编辑器 没有之一 个人见解勿杠杠就是你对 虽然看似全是英文 对于英语不好的小伙伴不友好 但是 不管是代码还是菜单栏 都有翻译
  • 照片转换为超声图像(MATLAB仿真)

    照片转换为超声图像 MATLAB 仿真实现 任意选取一张照片转换为超声图像 1 选取一张照片 2 将照片转换为散射点 3 进行超声成像仿真
  • Echarts formatter

    提示框浮层内容格式器 支持字符串模板和回调函数两种形式 回调函数 params Object Array ticket string callback ticket string html string gt string HTMLElem
  • 威纶通定时循环操作宏_威纶通触摸屏宏指令的使用

    工控多年的公众号运营者 我经常分享原创技术内容 内容涉及到工业多个方面 分享新知识带你一起进步 今天看到一个例程 想再写一下威纶通触摸屏宏指令的使用 之前有分享过一篇有关威纶通关于宏指令使用的文章 那篇文章的宏只用过 GetData 指令
  • iis多进程下的全局变量_python下多线程的限制以及多进程中传递参数的方式!不来瞅瞅?...

    欢迎各位小哥哥小姐姐阅读本的文章 对大家学习有帮助 请点赞加关注哦 您的点赞和关注将是我持续更新的动力呢 v 有不懂的问题可以私聊我哦 python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁 global
  • C#桌面程序无法调试以及无法查看变量的解决办法

    作者 朱金灿 来源 clever101的专栏 为什么大多数人学不会人工智能编程 gt gt gt 一 问题描述 最近在调试一个C 桌面程序 总是无法进入调试状态 后来能进入调试状态了 却无法查看程序变量的值 二 问题解决过程 经过搜索网上资
  • python 中wheel 安装_python中wheel的用法整理

    Python的第一个主流打包格式是 egg文件 现在大家庭中又有了一个叫做Wheel whl 的新成员 wheel 被设计成包含PEP 376兼容安装 一种非常接近于磁盘上的格式 的所有文件 在本文中 我们将学习如何创建一个wheel以及如
  • linux 命令行报bash command not found的解决办法

    命令行报bash command not found的解决办法 几乎所有命令 命令行输入命令执行后报 bash command not found 这是由于系统PATH设置问题 PATH没有设置对 系统就无法找到精确命令了 1 在命令行中输
  • Nginx 返回自定义 text 或 json

    叙述 有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串 如果逻辑非常简单或者干脆是固定的字符串 那么可以使用nginx快速实现 这样就不用编写程序响应请求了 可以减少服务器资源占用并且响应性能非常快 解决方案 固定文本
  • 实时音频编解码之十五 Opus编码-CELT编码

    本文谢绝任何形式转载 谢谢 4 3 1 基频预滤波 对预加重之后信号预滤波 其和解码器的后滤波相反 基频周期搜索应根据以下标准优化 1 连续性 对于连续帧 基频周期通常不会突变 2 避免基频倍数 当使用的周期是实际周期的倍数时 后滤波器失去
  • 蓝桥杯真题:算式问题

    emmm其实是算全排列的问题 按照STL文档的描述 next permutation函数将按字母表顺序生成给定序列的下一个较大的排列 直到整个序列为降序为止 prev permutation函数与之相反 是生成给定序列的上一个较小的排列 具
  • 超详细!!!Linux:利用Shell脚本使用case分支语句

    case分支语句 case 语句 case语句主要适用情况 case分支语句语法结构 case值得注意的特点 case语句应用示例 1 检查用户输入字符类型 2 编写系统服务脚本 case 语句 case语句主要适用情况 某个变量存在多种取