shell语法之case

case的语法格式如下:
       case var in
            exp-1) 命令体1 ;;
            exp-2) 命令体2 ;;
                  ...
            *)    命令体 ;;
shell通过计算变量var的值,将其结果依次和运算式exp-1, exp-2等进行比较,直到找到一个匹配的运算式为止。如果找到了匹配项,则执行它下面的命令直到遇到一对分号(;;)为止。  


平时较小用case语句,偶尔用到,所以记录如下:
1> var可以是数字,也可以是字符串,只是在下面的判断运算式exp里区分就行
2> 判断运算式exp可以只是一个数字,或一字符串,也可以是一个运算式如$((a+b)) 其中a,b在上面已赋值,也可以是一个正则表达式
3> *即为当上面的判断运算式都匹配失败时才会执行它的命令体, 该项为可选
4> 一对分号可以跟在命令体最后一语句后,也可以写在命令体结束后的下一空行.作用相同

一段程序如下:
param=$1
a=11
b=12
echo "paramA="$param
case $param in
$((a+b))) echo "NO1"
                param="dog"   ;;
hello)      echo "NO2"
               param="cat";;
10)          echo "NO3"
               param="pig";;
*)            echo "ERROR"
esac
echo "paramB="$param
接下来执行这段程序时,我可以分别带参数10 或 23 或 "hello" 看看结果打印的param的不同. 同时可以把
case......esac 这一段代码放在()中, 再分别执行后观察param的打印情况.在执行()中的代码时shell会创建一新的子进程,所以在子进程中的对param的修改并不会影响到父进程中的变量的值.

### Shell Script 中 `case` 语句的语法和使用方法 在 Shell 脚本中,`case` 语句是一种多分支条件判断结构,它允许根据一个变量的值来选择不同的代码块执行。这种结构通常比多个 `if-elif` 条件判断更清晰和高效。`case` 语句的基本语法如下: ```bash case expression in pattern1) # commands to execute if expression matches pattern1 ;; pattern2) # commands to execute if expression matches pattern2 ;; *) # default case, commands to execute if no match is found ;; esac ``` #### 语法说明: - `expression` 是要匹配的值,通常是一个变量或命令的输出。 - `pattern1`, `pattern2` 等是匹配模式,可以是字符串、通配符或正则表达式。 - 每个分支的代码块以 `)` 开始,以 `;;` 结束。 - `*)` 是默认分支,用于处理未匹配到任何模式的情况。 #### 示例: 以下是一个简单的示例,展示如何使用 `case` 语句处理命令行参数: ```bash #!/bin/bash # 获取第一个命令行参数 option=$1 # 使用 case 语句处理不同的选项 case $option in --help) echo "显示帮助信息" ;; --version) echo "显示脚本版本信息" ;; --print) echo "打印传递的参数: $2" ;; *) echo "未知选项: $option" ;; esac ``` #### 使用通配符: `case` 语句支持使用通配符进行模式匹配。例如,使用 `*` 匹配任意字符串: ```bash case $option in start|START) echo "启动服务" ;; stop|STOP) echo "停止服务" ;; *) echo "无效的命令" ;; esac ``` 在这个例子中,`start|START` 表示匹配 `start` 或 `START`。 #### 匹配数字范围: `case` 语句也可以用于匹配数字范围: ```bash case $number in 1) echo "数字是1" ;; 2|3) echo "数字是2或3" ;; [4-9]) echo "数字在4到9之间" ;; *) echo "数字不在1到9之间" ;; esac ``` #### 结合函数使用: `case` 语句可以与函数结合使用,实现更复杂的功能。例如: ```bash #!/bin/bash # 定义函数 function display_help() { echo "Usage: myprint [OPTIONS] [arg ...]" echo "--help Display help" echo "--version Display version of script" echo "--print Print arguments" } function display_version() { echo "Version of shell script application is 0.1" } function myprint() { echo "Arguments are: $*" } # 获取第一个参数 option=$1 # 使用 case 处理不同的选项 case $option in --help) display_help ;; --version) display_version ;; --print) shift myprint $@ ;; *) display_help ;; esac ``` 在这个例子中,`case` 语句根据用户输入的选项调用相应的函数。 #### 注意事项: - `case` 语句的模式匹配是按顺序进行的,一旦匹配到某个模式,就会执行对应的代码块,并跳过后续的模式匹配。 - 如果需要在匹配成功后继续检查其他模式,可以使用 `;&` 替代 `;;`。 - `case` 语句的结束必须使用 `esac`,这是 `case` 的反写。 通过 `case` 语句,可以更方便地处理多分支逻辑,尤其是在处理命令行参数时非常有用。[^2] --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值