linux shell

关注公众号 jb51net

关闭
首页 > 脚本专栏 > linux shell > shell脚本case语句

shell脚本case语句的具体使用

作者:白小书

Shell脚本中的case语句是一种多分支条件判断结构,主要用于匹配变量值与预设模式并执行对应的命令序列,下面就来具体介绍一下case语句的具体使用

引言

Shell脚本中的case语句是一种多分支条件判断结构,主要用于匹配变量值与预设模式并执行对应的命令序列。

一、基础语法结构

case 变量 in
  模式1)
    命令序列1
    ;;
  模式2|模式3)  # 使用 | 分隔多个模式
    命令序列2
    ;;
  *)  # 默认分支
    默认命令序列
    ;;
esac

二、case 语法结构解释

1、case 语句以case开始,esac结束(反写)

2、每个模式分支以 “)” 结束,命令序列以 “;;” 终止

3、变量:待匹配的变量或表达式

4、模式:支持以下几种匹配模式
    匹配任意长度字符:*          例如:*.jpg       表示匹配jpg扩展名
    匹配单个字符:?              例如:go?d.jpg    表示匹配go“单个任意字母”d.jpg的文件
    范围匹配:[...]              例如:[a-z]       表示匹配所有小写字母
    范围不匹配:[!...]           例如:[!a-z]      表示排除所有小写字母
    逻辑或:|                    例如:a|b         表示匹配 a 或 b

三、典型应用场景示范

3.1、文件扩展名处理

---使用“*”匹配任意长度文件类型执行不同操作---
case $file in
  *.tar.gz)  tar -zxvf $file ;;
  *.zip)     unzip $file ;;
  *.log)     grep "ERROR" $file ;;
esac

3.2、匹配英语单词

---使用“?”单字符匹配和“范围不匹配”用户输---
read -p "Please enter:" Var
case ${Var} in
  go[!opq]d )    # 匹配go*d类单词(*只包含是1个字符长度),排除good、gopd、goqd这3个
    echo "Excluding o :${Var}"
    ;;
  go?d )         # 匹配 good、gopd、goqd
    echo "Include ? :${Var} "
    ;;
  *)             # 默认匹配
    echo "Other var : ${Var}"
    ;;
esac

3.3、数字/字母/符号分类

---使用“范围匹配”识别用户输入类型---
read -p "输入字符: " Var
case $Var in
  [0-9]) echo "匹配数字" ;;
  [a-zA-Z]) echo "匹配字母" ;;
  *) echo "其他特殊符号" ;;
esac

3.4、管理服务脚本‌

---使用“逻辑或”管理nginx服务---
case $1 in
  start|S) systemctl start nginx ;;
  stop|T)  systemctl stop nginx ;;
  restart|R) systemctl restart nginx ;;
  *) echo "Usage: $0 {start|stop|restart}" ;;
esac

四、case语法特点

1、模式匹配按顺序执行,首个匹配成功后即终止
2、默认分支*)应放在最后,处理未匹配情况
3、支持嵌套使用,可结合循环语句增强功能
4、case适合离散值匹配,if更适合范围判断
5、case语法比if结构更简洁直观、便于维护
6、数据显示case语句比等效if-else链快3倍(处理10000次匹配仅需0.12秒)

到此这篇关于shell脚本case语句的具体使用的文章就介绍到这了,更多相关shell脚本case语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文