shell中case的使用

 更新时间:2024年11月01日 08:36:29   作者:静听山水  
case语句是基于值的多分支选择结构,通过匹配表达式的值来执行相应的代码块,它的基本结构包括case关键字、待匹配的表达式、模式、代码块、默认分支(*)和结束关键字esac,感兴趣的可以了解一下

case 语句用于根据某个表达式的值执行不同的代码块。

基本结构

case 表达式 in
    模式1)
        代码块1
        ;;
    模式2)
        代码块2
        ;;
    ...
    *)
        默认代码块
        ;;
esac

详细解释

  • case 表达式 in

    • case 关键字开始一个 case 语句。
    • 表达式 是要匹配的值,可以是一个变量或一个固定的值。
    • in 关键字表示模式列表的开始。
  • 模式

    • 每个模式后面必须跟一个右括号 ),以标记该模式的结束。
    • 模式可以是单个值,也可以是多个值用 | 分隔,表示多个值都可以匹配同一个代码块。
  • 代码块

    • 每个模式对应的代码块是一系列命令,这些命令在匹配成功时会被执行。
    • 代码块以 ;; 结束,表示该分支的结束。
  • *)

    • *) 是默认分支,用于处理所有不匹配前面任何模式的情况。
    • 默认分支也是可选的,但通常建议包含默认分支以处理意外情况。
  • esac

    • esac 关键字结束整个 case 语句。

示例

示例 1:基本用法

#!/bin/bash

# 获取用户输入
read -p "请输入一个数字 (1-7): " num

# 根据输入的数字输出相应的星期几
case $num in
    1)
        echo "星期一"
        ;;
    2)
        echo "星期二"
        ;;
    3)
        echo "星期三"
        ;;
    4)
        echo "星期四"
        ;;
    5)
        echo "星期五"
        ;;
    6)
        echo "星期六"
        ;;
    7)
        echo "星期日"
        ;;
    *)
        echo "无效的输入"
        ;;
esac

示例 2:多值匹配

#!/bin/bash

# 获取用户输入
read -p "请输入一个字母 (a-z): " letter

# 根据输入的字母输出相应的信息
case $letter in
    a|e|i|o|u)
        echo "这是一个元音字母"
        ;;
    b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z)
        echo "这是一个辅音字母"
        ;;
    *)
        echo "无效的输入"
        ;;
esac

示例 3:范围匹配

#!/bin/bash

# 获取用户输入
read -p "请输入一个数字 (1-100): " num

# 根据输入的数字输出相应的范围
case $num in
    [1-9])
        echo "数字在 1 到 9 之间"
        ;;
    [1-9][0-9])
        echo "数字在 10 到 99 之间"
        ;;
    100)
        echo "数字是 100"
        ;;
    *)
        echo "无效的输入"
        ;;
esac

特殊用法

  • 通配符

    • 可以使用通配符 * 和 ? 进行模糊匹配。
    • * 匹配任意长度的任意字符。
    • ? 匹配单个任意字符。
  • 复合模式

    • 可以使用括号 () 包含多个模式,形成复合模式。

示例 4:通配符匹配

#!/bin/bash

# 获取用户输入
read -p "请输入一个文件名: " filename

# 根据输入的文件名输出相应的信息
case $filename in
    *.txt)
        echo "这是一个文本文件"
        ;;
    *.jpg|*.jpeg|*.png)
        echo "这是一个图片文件"
        ;;
    *)
        echo "未知类型的文件"
        ;;
esac

总结

case 语句是一种强大的条件控制结构,适用于多种场景,特别是当需要根据多个可能的值执行不同操作时。通过合理使用模式匹配和默认分支,可以编写出简洁且易于维护的脚本。

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

相关文章

  • 常用的34个Linux Shell脚本(小结)

    常用的34个Linux Shell脚本(小结)

    本文主要介绍了常用的35个Linux Shell脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • shell脚本批量创建用户的方法小结

    shell脚本批量创建用户的方法小结

    有些面试题中会问到批量创建用户的题目,大体是用循环去进行创建,但有时也会有一些额外的附加条件,下面这篇文章主要给大家介绍了关于shell脚本批量创建用户的相关资料,需要的朋友可以参考下
    2022-03-03
  • 简介Linux中cp和mv搭配{,}在shell当中的用法

    简介Linux中cp和mv搭配{,}在shell当中的用法

    这篇文章主要介绍了简介Linux中cp和mv搭配{,}在shell当中的用法,作者举了四个这样的大括号扩展示例,需要的朋友可以参考下
    2015-06-06
  • Shell正则表达式(元字符)的使用

    Shell正则表达式(元字符)的使用

    元字符指的是能够被shell解释的特殊字符,每个特殊字符都有其特殊含义,本文主要介绍了Shell正则表达式(元字符)的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 一张图让你学会Vim编辑器快捷键

    一张图让你学会Vim编辑器快捷键

    今天小编就为大家分享一篇一张图让你学会Vim编辑器快捷键,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 用shell脚本实现自动切换内网和外网实现高可用

    用shell脚本实现自动切换内网和外网实现高可用

    因为公司的服务器这段时间内网网卡老是出现问题,然后就导致了网站的各种问题,因为我们的数据库链接,redis还有sphinx链接都是走的内网,,所以就写了这个脚本,在线上也跑了一段时间了,,也没出过什么问题
    2013-06-06
  • Linux rpm 命令参数使用详解

    Linux rpm 命令参数使用详解

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”。本文给大家介绍Linux rpm命令参数使用详解,需要的童鞋一起看看吧
    2015-10-10
  • 进程状态ps -ef中的e、f含义讲解

    进程状态ps -ef中的e、f含义讲解

    这篇文章主要介绍了进程状态ps -ef中的e、f含义讲解,通过本文学习我们知道-e和-A都显示有关其他用户进程的信息,包括那些没有控制终端的进程,-f显示用户id,进程id,父进程id,最近CPU使用情况,进程开始时间等等,具体含义及更多命令跟随小编通过本文学习
    2022-11-11
  • shell中函数的应用

    shell中函数的应用

    今天这个脚本其实很简单,但很实用,讲的是shell中函数的应用,需要的朋友可以参考下
    2016-08-08
  • 关于"Argument list too long”参数列表过长的四种解决方法

    关于"Argument list too long”参数列表过长的四种解决方法

    Linux下报错“命令参数列表过长”,在用mv命令一次移动3万多个文件时失败了,原始命令类似这样:”mv $(ls dir1) dir2“,错误提示的中心思想是:”你这参数也太TM多了吧“,本文给大家分享四种解决”Argument list too long”参数列表过长,感兴趣的朋友一起看看吧
    2023-02-02

最新评论