case
语句用于根据变量的值执行不同的代码块。其基本语法如下:,,``sh,case $variable in, pattern1), # commands for pattern1, ;;, pattern2), # commands for pattern2, ;;, *), # default commands if no patterns match, ;;,esac,
`,,,,
`sh,#!/bin/bash,,echo "Enter a number between 1 and 3:",read num,,case $num in, 1), echo "You entered one.", ;;, 2), echo "You entered two.", ;;, 3), echo "You entered three.", ;;, *), echo "Invalid input.", ;;,esac,
``在Linux编程中,case
语句是shell
脚本中用来进行条件判断的重要工具,它能够根据变量的值执行不同的命令或代码块,类似于其他编程语言中的switch-case
结构,本文将详细介绍case
语句的使用方法、语法规则以及实际应用示例。
`case` 语句的基本语法
在Linux shell脚本中,case
语句的基本语法如下:
case 变量名 in 模式1) # 模式1匹配时执行的命令 ;; 模式2) # 模式2匹配时执行的命令 ;; *) # 所有模式都不匹配时执行的命令 ;; esac
变量名
是要进行匹配的变量,模式
是用来匹配变量值的模式,可以是具体的字符串、正则表达式等,每个模式后面跟一个右括号)
,然后是冒号:
,接着是当该模式匹配时要执行的命令序列,最后以两个分号;;
结束。
常见用法及示例
示例1:简单的字符串匹配
以下是一个基本的case
语句示例,用于根据用户输入的选项执行不同的操作:
#!/bin/bash echo "请选择一个选项:" echo "1. 显示当前日期" echo "2. 显示当前时间" echo "3. 退出" read -p "请输入你的选择 (1/2/3): " choice case $choice in 1) date ;; 2) time ;; 3) echo "退出脚本" exit 0 ;; *) echo "无效的选择,请重新运行脚本。" ;; esac
在这个例子中,脚本会根据用户输入的数字执行相应的命令:输入1
显示当前日期,输入2
显示当前时间,输入3
退出脚本,输入其他数字则提示无效选择。
示例2:使用通配符和正则表达式
case
语句不仅可以匹配具体的字符串,还可以使用通配符(如)和正则表达式来进行更复杂的匹配。
#!/bin/bash read -p "请输入一个文件扩展名 (txt, doc, pdf): " ext case $ext in *.txt) echo "这是一个文本文件" ;; *.doc) echo "这是一个Word文档" ;; *.pdf) echo "这是一个PDF文件" ;; *) echo "未知的文件类型" ;; esac
在这个例子中,无论用户输入的文件扩展名前面是否有其他字符,只要后缀匹配指定的模式,就会执行相应的命令。
示例3:嵌套case
语句
有时我们需要在已经匹配的情况下进一步细分条件,这时可以使用嵌套的case
语句。
#!/bin/bash read -p "请输入一个动物名称: " animal case $animal in dog|cat) echo "你输入的是宠物" case $animal in dog) echo "狗是人类的好朋友" ;; cat) echo "猫是很独立的动物" ;; esac ;; elephant|giraffe) echo "你输入的是大型哺乳动物" ;; *) echo "未知的动物" ;; esac
在这个例子中,如果用户输入的是dog
或cat
,首先会输出“你输入的是宠物”,然后根据具体是dog
还是cat
进一步输出不同的信息。
`case` 语句的注意事项
大小写敏感:默认情况下,case
语句是大小写敏感的,如果要忽略大小写,可以将变量转换为小写或大写后再进行匹配。
空格和制表符:确保case
语句中的模式和命令之间没有多余的空格或制表符,否则可能会导致语法错误。
匹配顺序:case
语句按照从上到下的顺序进行匹配,一旦找到匹配的模式,就会执行对应的命令并跳过后续的模式检查,应将最有可能匹配的模式放在前面,以提高脚本效率。
默认情况:使用*)
来处理所有未匹配的情况,确保脚本的健壮性。
实际应用场景
场景1:菜单驱动的脚本
在编写交互式脚本时,case
语句常用于实现菜单功能,让用户通过输入选项来选择不同的操作,一个简单的计算器脚本:
#!/bin/bash echo "请选择一个操作:" echo "1. 加法" echo "2. 减法" echo "3. 乘法" echo "4. 除法" read -p "请输入你的选择 (1/2/3/4): " choice case $choice in 1) read -p "请输入第一个数: " num1 read -p "请输入第二个数: " num2 echo "结果: $(($num1 + $num2))" ;; 2) read -p "请输入第一个数: " num1 read -p "请输入第二个数: " num2 echo "结果: $(($num1 $num2))" ;; 3) read -p "请输入第一个数: " num1 read -p "请输入第二个数: " num2 echo "结果: $(($num1 * $num2))" ;; 4) read -p "请输入第一个数: " num1 read -p "请输入第二个数: " num2 echo "结果: $(($num1 / $num2))" ;; *) echo "无效的选择,请重新运行脚本。" ;; esac
场景2:配置文件解析
在解析配置文件时,可以使用case
语句根据配置项的名称执行不同的处理逻辑,解析一个简单的配置文件:
#!/bin/bash config_file="config.txt" while IFS= read -r line; do if [[ $line =~ ^# ]]; then # 跳过注释行 continue fi key=$(echo $line | cut -d'=' -f1) value=$(echo $line | cut -d'=' -f2) case $key in username) echo "用户名: $value" ;; password) echo "密码: $value" ;; host) echo "主机: $value" ;; port) echo "端口: $value" ;; *) echo "未知的配置项: $key" ;; esac done < "$config_file"
这个脚本会读取config.txt
文件中的每一行,根据键名执行不同的处理逻辑。
相关问答FAQs
Q1:如何在case
语句中忽略大小写?
A1:可以在进入case
语句之前将变量转换为小写或大写。
read -p "请输入一个字母: " letter case ${letter,,} in # 将变量转换为小写 a) echo "这是 A" ;; b) echo "这是 B" ;; *) echo "不是 A 或 B" ;; esac
Q2:如何在case
语句中使用正则表达式进行匹配?
A2:Bash 的case
语句本身不支持正则表达式匹配,但可以通过结合[[ ... == ... ]]
运算符来实现。
read -p "请输入一个数字: " num case $num in [0-9]) echo "这是一个数字" ;; # 匹配单个数字字符 [[:digit:]]+) echo "这是一个多位数字" ;; # 匹配一个或多个数字字符 *) echo "这不是一个数字" ;; # 其他情况 esac
注意,上述示例中的正则表达式匹配需要使用双中括号[[ ... ]]
,而不是单中括号[...]
。
以上就是关于“linux case 语句”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!