CASE 语句是 Bash 中强大的条件语句,允许您根据值列表测试变量。它是使用多个 if-then 语句的更简洁、更有效的替代方案。很多时候它是一个很好的替代品if-else 语句。您还可以使用它来处理命令行参数在 shell 脚本中。
在本文中,我们将向您介绍 Bash 中的 CASE 语句,并提供如何在 Bash 脚本中使用它的示例。
Bash 中 CASE 语句的语法
Bash 中 CASE 语句的语法如下:
|
case 表达in
pattern1)
命令1;;
pattern2)
命令2;;
pattern3)
命令3;;
*)
默认命令;;
esac
|
case 关键字指示 CASE 语句的开始,in 关键字将要测试的表达式与模式列表分开。每个模式都用括号括起来,后面是如果模式与表达式匹配则要执行的命令列表。双分号(;;)
指示每个命令列表的结尾。这*)
模式匹配与任何先前模式都不匹配的任何表达式,并且在这种情况下执行default_commands。
在 Bash 中使用 CASE 语句
当您想要将变量与可能值列表进行比较时,Bash 中的 CASE 语句特别有用。下面的示例展示了如何使用 CASE 语句来检查 $USER 环境变量的值:
|
case $USER in
root)
echo “您已以 root 身份登录。”;;
ubuntu)
echo “您已以 ubuntu 身份登录。”;;
*)
echo “您以未知用户身份登录。”;;
esac
|
在此示例中,正在测试的表达式是$USER环境变量。这些模式是可能的值$USER(root 和 ubuntu),默认模式是*)
模式,匹配除 root 或 ubuntu 以外的任何值。
带有命令行参数的 CASE 语句
也可以使用CASE语句来处理命令行参数在 Bash 脚本中。下面的示例展示了如何使用 CASE 语句来处理不同的命令行选项:
1
2
3
4
5
6
7
8
9
10
11
12
|
while getopts "a:b:c:" opt; do
case $opt in
a)
echo “选项 a 已通过参数 $OPTARG 传递”;;
b)
echo “选项 b 已通过参数 $OPTARG 传递”;;
c)
echo “选项 c 已通过参数 $OPTARG 传递”;;
*)
echo “无效选项:-$OPTARG”;;
esac
done
|
在此示例中,getoptscommand 用于处理命令行选项。 case 语句用于处理每个选项(a、b 和 c)及其相应的参数。默认模式(*)
用于处理任何无效选项。
带正则表达式的 CASE 语句
case语句中使用的正则表达式用方括号括起来([])
。这是因为我们使用字符类来匹配不同类型的字符。这+
第二个模式后面的符号用于匹配前一个模式的一次或多次出现(在本例中为小写字母)。正则表达式可能非常复杂,并且您可以在 Bash 中使用更多功能和选项来匹配模式。
下面是如何在 Bash 中将正则表达式与 case 语句结合使用的示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/bash
read -p “输入一个字符串:” str
case $str in
[a-z][0-9])
echo “该字符串以小写字母开头,以数字结尾。”
;;
[A-Z][a-z]+)
echo “该字符串以大写字母开头,后跟小写字母。”
;;
[0-9]+)
echo “该字符串仅包含数字。”
;;
*)
echo “该字符串与任何模式都不匹配。”
;;
esac
|
在此示例中,我们使用正则表达式来匹配不同模式的字符串。第一个模式匹配以小写字母开头并以数字结尾的字符串,例如 a1、b2 等。第二个模式匹配以大写字母开头、后跟一个或多个小写字母的字符串,例如 Hello、World 等。第三个模式匹配仅包含数字的字符串,例如 123、4567 等。默认模式匹配与任何先前模式都不匹配的任何字符串。
当脚本运行时,它会提示用户输入一个字符串。然后使用 case 语句针对不同模式测试该字符串。如果模式匹配,则显示相应的消息。如果没有任何模式匹配,则显示默认消息。
结论
Bash 中的 CASE 语句是使用多个 if-then 语句的强大且高效的替代方案。它允许您根据可能值列表测试变量并根据匹配模式执行不同的命令。当您想要处理命令行参数或将变量与可能值列表进行比较时,CASE 语句特别有用。通过使用CASE语句,可以写得更加简洁易读