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

第二十六章 流程控制: 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

运行结果如下:

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

相关文章:

  • 乐观锁与悲观锁的实现和应用
  • Java 泛型技术详解
  • 【判断既约分数】2022-4-3
  • JDK21深度解密 Day 13:性能调优实战案例:高并发系统与内存密集型应用的优化秘籍
  • 【数据结构初阶】--算法复杂度的深度解析
  • Linux编程:2、进程基础知识
  • 后端下载限速(redis记录实时并发,bucket4j动态限速)
  • 如何在 Java 中优雅地使用 Redisson 实现分布式锁
  • 【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
  • 在Vue或React项目中使用Tailwind CSS实现暗黑模式切换:从系统适配到手动控制
  • [逆向工程] C实现过程调试与钩子安装(二十七)
  • win10环境配置-openpose pytorch版本
  • 【Hugging Face】实践笔记:Pipeline任务、BERT嵌入层、Train任务、WandB解析
  • 编程基础:执行流
  • 快速幂求逆元板子
  • 【论文阅读笔记】《A survey on deep learning approaches for text-to-SQL》
  • 《高等数学》(同济大学·第7版)第二章第五节“函数微分“
  • Java IO流完全指南:从基础到进阶的全面解析
  • python打卡day47@浙大疏锦行
  • 【手动触发浏览器标签页图标自带转圈效果】
  • 网站建设时送的ppt方案/北京seo优化厂家
  • 广州 营销型网站建设/关键词检测工具
  • 南山老品牌网站建设/德芙巧克力软文推广
  • 郑州正规网站设计价格/北京seo优化费用
  • wordpress维护插件/湖南广告优化
  • 视频网站做短视频/做一个企业网站需要多少钱