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语句有所帮助。