1. 简介
在Linux操作系统中,Case语句是一种非常常用的条件判断语句。它类似于其他编程语言中的switch语句,在不同的条件下执行不同的代码块。本文将详细介绍Linux中的Case语句的用法和一些常见的技巧。
2. Case语句的基本语法
Case语句的基本语法如下:
case 变量 in
模式1 )
代码块1
;;
模式2 )
代码块2
;;
...
esac
Case语句以case关键字开始,后面跟着一个变量名。接着是in关键字,然后是多个模式和对应的代码块。每个模式以圆括号括起来,并以关键字)结束。代码块以两个分号;;结束。
当变量的值匹配某个模式时,对应的代码块将会被执行。如果没有任何一个模式匹配,Case语句将会终止。
2.1 简单的示例
下面是一个简单的示例,展示了Case语句的基本用法:
#!/bin/bash
fruit="apple"
case $fruit in
apple )
echo "这是一个苹果"
;;
orange )
echo "这是一个橘子"
;;
banana )
echo "这是一个香蕉"
;;
esac
上述代码中,变量fruit的值是apple,Case语句会根据apple的值匹配apple模式,然后执行对应的代码块,输出这是一个苹果。
2.2 使用通配符
Case语句不仅支持精确匹配模式,还支持通配符。常用的通配符有*和?。
下面是一个使用*通配符的示例:
#!/bin/bash
filename="file.txt"
case $filename in
*.txt )
echo "这是一个文本文件"
;;
*.jpg | *.png )
echo "这是一个图片文件"
;;
* )
echo "这是一个其他类型的文件"
;;
esac
上述代码中,根据文件名的不同类型匹配对应的模式,如果是以.txt结尾的文件名,则执行第一个代码块,输出这是一个文本文件。如果是以.jpg或.png结尾的文件名,则执行第二个代码块,输出这是一个图片文件。其他类型的文件则执行第三个代码块,输出这是一个其他类型的文件。
2.3 范围匹配
在Case语句中,还可以使用...来表示范围匹配。下面是一个示例:
#!/bin/bash
score=80
case $score in
[0-59] )
echo "不及格"
;;
[60-79] )
echo "及格"
;;
[80-89] )
echo "良好"
;;

[90-100] )
echo "优秀"
;;
* )
echo "无效的分数"
;;
esac
上述代码根据score的值匹配相应的分数范围,并输出对应的评级。例如,score=80匹配[80-89]范围,输出良好。
3. Case语句的技巧
3.1 多个模式匹配
Case语句支持多个模式匹配,多个模式之间使用|分隔。下面是一个示例:
#!/bin/bash
fruit="apple"
case $fruit in
apple | orange )
echo "这是一个苹果或橘子"
;;
banana )
echo "这是一个香蕉"
;;
esac
上述代码中,如果变量fruit的值是apple或orange,则执行第一个代码块,输出这是一个苹果或橘子。如果是banana,则执行第二个代码块,输出这是一个香蕉。
3.2 使用默认模式
在Case语句中,可以使用*)表示默认模式,当没有匹配的模式时,会执行默认模式下的代码块。下面是一个示例:
#!/bin/bash
fruit="watermelon"
case $fruit in
apple )
echo "这是一个苹果"
;;
orange )
echo "这是一个橘子"
;;
banana )
echo "这是一个香蕉"
;;
* )
echo "这不是一个常见的水果"
;;
esac
上述代码中,变量fruit的值为watermelon,没有匹配的模式,执行默认模式下的代码块,输出这不是一个常见的水果。
3.3 反转模式匹配
在Case语句中,可以使用!来反转模式匹配。下面是一个示例:
#!/bin/bash
fruit="apple"
case $fruit in
!apple )
echo "这不是一个苹果"
;;
* )
echo "这是一个苹果"
;;
esac
上述代码中,如果变量fruit的值不是apple,则执行第一个代码块,输出这不是一个苹果。否则执行第二个代码块,输出这是一个苹果。
4. 总结
本文介绍了Linux中Case语句的基本用法和一些常见的技巧。Case语句可以根据不同的条件执行不同的代码块,非常适用于条件判断。通过灵活运用模式匹配和通配符,可以更加高效地编写Shell脚本。希望本文对您理解和使用Case语句有所帮助。


