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