当前位置: 首页 > backend >正文

第二十六章 流程控制: case分支

第二十六章 流程控制: case分支

很多编程语言都提供了专门处理多重选择的流程控制机制,Shell也是如此,其它编程语言拥有switch-case语句,而Shell中拥有case语句。

case命令

在Bash中,多重选择复合命令是case,其用法如下:

case word in[pattern [| pattern]...) commands ;;]...
esac

其中pattern是模式,当word和模式匹配按照先后顺序,只执行第一个匹配到的模式的commands。

case模式示例

模式描述
a)如果word是a,则匹配
[[:alpha]])如果word是单个字母,则匹配
???)如果word是3个字符,则匹配
*.txt)如果word是以.txt结尾,则匹配
*)不管word是什么内容,均可匹配。将该模式作为case命令最后一个模式是一种不错的做法,可以匹配之前模式无法匹配的内容。

例如:

#!/bin/bashread -p "enter word > "case "$REPLY" in[[:alpha:]]) echo "is a single alphabetic character." ;;[ABC][0-9])  echo "is A, B, or C followed by a digit." ;;???)         echo "is three characters long." ;;*.txt)       echo "is a word ending in '.txt'" ;;*)           echo "is something else." ;;
esac

也可以使用分割符,将多个模式组合在一起,形成“逻辑或”(or)关系的条件模式。这在同时处理大小写字母时很有用,例如:

#!/bin/bashclear
echo "
Please Select:A. Display System Information
B. Display Disk Space
C. Display Home Space Utilization
Q. Quit
"
read -p "Enter selection [A, B, C or Q] >"case "$REPLY" inq|Q)  echo "Program terminated."exit;;a|A)  echo "Hostname: $HOSTNAME"uptime;;b|B)  df -h;;c|C) if [[ "$(id -u)" -eq 0 ]]; thenecho "Home Space Utilization (All users)"du -sh /home/*elseecho "Home Space Utilization ($USER)"du -sh "$HOME"fi;;*)   echo "Invalid entry" >&2exit 1;;
esac

执行多次操作

在Bash4.0之前,case无法匹配多个分支。现代版本Bash添加了;;&语法,允许继续测试下一个模式。

例如:

#!/bin/bash#case4-2: 测试一个字符read -n 1 -p "Type a character >"
echo
case "$REPLY" in[[:upper:]]) echo "'$REPLY' is upper case." ;;&[[:lower:]]) echo "'$REPLY' is lower case." ;;&[[:alpha:]]) echo "'$REPLY' is aphabetic."  ;;&[[:digit:]]) echo "'$REPLY' is a digit."    ;;&[[:graph:]]) echo "'$REPLY' is a visible character." ;;&[[:punct:]]) echo "'$REPLY' is a punctuation symbol." ;;&[[:space:]]) echo "'$REPLY' is awhitespace character." ;;&
esac

运行结果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://www.xdnf.cn/news/12777.html

相关文章:

  • 一键亮灯高级和弦触发自动鼓机:特伦斯自动挡钢琴开启音乐创作的全新时代
  • B站Miachael_ee——蓝牙教程笔记
  • 【论文解读】Toolformer: 语言模型自学使用工具
  • C++图书管理
  • MySQL 8.0 绿色版安装和配置过程
  • 属于我的“龙场悟道”
  • 桌面图标无法对齐!
  • 解密LSTM(长短期记忆网络):让机器拥有记忆力的魔法网络
  • 软件测试与军用标准详细框架
  • Java异步编程难题拆解与技术实践
  • 【AI论文】推理健身房(REASONING GYM):基于可验证奖励的强化学习推理环境
  • vue3 创建图标 按钮
  • Kafka 消息模式实战:从简单队列到流处理(一)
  • Linux安全机制:从SELinux到Intel SGX的堡垒
  • 轻创业技术方案:基于格行双目摄像头的代理系统设计!低成本创业项目有哪些?2025轻资产创业项目排行榜前十名!0成本创业项目推荐!格行代理项目靠谱吗?
  • 力扣hot100---152.乘积最大子数组
  • Java泛型中的通配符详解
  • Springboot项目中minio的使用场景、使用过程(仅供参考)
  • 13-Oracle 23ai Vector Search VECTOR数据类型和实操
  • groovy:java 发送一封带有附件的邮件
  • 利用qcustomplot绘制曲线图
  • audio-ovrlipsync-viseme-reference 口型同步 唇形同步 插件
  • Linux系统 - 线程 -6- 线程安全函数和可重入函数
  • Qt的学习(一)
  • Hash类型
  • 题海拾贝:P1091 [NOIP 2004 提高组] 合唱队形
  • WSF07N10 MOSFET 在铲皮机中的应用
  • WebFuture 系统升级提示外键约束的问题处理
  • 【判断既约分数】2022-4-3
  • 图卷积网络:从理论到实践