shell中case的使用
作者:静听山水
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!