多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# **一、if语法结构** ## **1. 单分支结构** ``` if < 条件表达式 > then 指令 fi ``` 或者 ``` if < 条件表达式 >;then 指令 fi ``` ## **2. 双分支结构** ``` if < 条件表达式 > then 指令1 else 指令2 fi ``` ## **3. 多分支结构** ``` if < 条件表达式1 > then 指令1 elif < 条件表达式2 > then 指令2 elif < 条件表达式3 > then 指令3 else 指令4 fi ``` >条件表达式可以是test、[]、[[]]、(())等,也可以直接使用命令作为条件表达式 每个if语句都以if开头,并带有then,最后以fi结尾 多分支每个elif后也要带then,但else后不带then ## **4. 条件表达式和if语句的变换** 符号条件表达式能够转换为if语句,如下 ``` [ -f /etc/passwd ] && echo 1 || echo 0 ``` 等同于 ``` if [ -f /etc/passwd ] then echo 1 else echo 0 fi ``` > 其他条件表达式类似 # **二、case语句说明和语法** ## **1. 说明** * case语句相当于多分枝的if/elif/else条件语句,但看起来更工整,常用于实现系统服务启动脚本等应用中 * case主要是写服务的启动脚本,适用范围较窄 * if取值判断、比较,应用面比case更广,几乎所有case语句都可以用if实现 ## **2. 语法** ``` case "变量" in 值1) 指令1... ;; 值2) 指令2... ;; *) 指令3... esac ``` 说明: * 如果变量的值等于值1时,则执行该值后面的指令1直到遇到`;;`后停止,然后跳出case语句,执行case语句后面的其他指令 * 如果没有匹配到任何值,则执行`*)`后面的指令,该指令通常是提示用户的指令,最后一个值可以省略双分号 * 表达式值支持管道、正则等多功能匹配 ## **3. 简单实践** 根据用户输入判断用户输入的哪个数值,并输出,如果非数值,则提示错误 * `cat /server/scripts/b7.sh` ```shell #!/bin/bash read -p "pls input num[1-9]" num case "$num" in 1) echo "the num is 1" ;; 2) echo "the num is 2" ;; [3-9]) echo "the num is $num" ;; *) echo "pls input num,3q" esac ``` **执行脚本查看结果:** > * `sh /server/scripts/b7.sh ` pls input num[1-9]1 the num is 1 > * `sh /server/scripts/b7.sh` pls input num[1-9]3 the num is 3 > * `sh /server/scripts/b7.sh` pls input num[1-9]g pls input num,3q