当前位置: 首页 > news >正文

Shell脚本结构化命令详解:if-then、test、复合条件与高级判断

一、if-then 语句
在编程中,结构化命令是指能够对命令的执行流程施加逻辑控制的语句。最基本的结构化命令就是 if-then。

基本语法:
if command
then
commands
fi
fi 表示 if 语句块的结束。

核心原理:Bash Shell 的 if 语句并不是直接判断条件是否为真,而是运行 if 后面的命令,然后检查该命令的退出状态码:

如果状态码为 0(命令执行成功),则执行 then 后面的命令
如果状态码为 非0(命令执行失败),则跳过 then 后面的命令

这种设计意味着,任何命令都可以放在 if 后面——只要命令成功执行,then 部分就会运行。

简写形式(将 then 放在同一行):
if command; then
commands
fi

二、if-then-else 语句
当命令成功执行时执行一组操作,失败时执行另一组操作,就需要 if-then-else:
if command
then
commands # 命令成功时执行
else
commands # 命令失败时执行
fi

三、elif 多分支语句
当需要判断多个条件时,可以使用 elif 来扩展 else 部分,避免嵌套多层 if:
if command1
then
commands
elif command2
then
commands
elif command3
then
commands
fi

四、test 命令
if-then 只能判断命令的退出状态码,而 test 命令提供了测试不同条件的能力。当 test 中列出的条件成立时,test 返回退出状态码 0,if-then 就会执行 then 部分。
两种等价语法:
if test condition
then
commands
fi

或使用方括号(更常用):
if [ condition ]
then
commands
fi
注意:方括号与条件内容之间必须有空格。[ condition ] 正确,[condition] 错误。

test 命令可以判断三类条件:


注意:test 命令只能处理整数,不能用于浮点数比较。

字符串相等性:所有的标点和大小写情况都考虑在内
字符串顺序:大于号和小于号必须转义(/<);大小写字母排序与sort命令恰好相反
字符串大小:-n和-z可以检查一个变量是否含有数据。

测试Linux文件系统上文件和目录的状态。

五、复合条件测试
if-then 允许使用布尔逻辑组合多个测试条件:

AND(与) :[ condition1 ] && [ condition2 ] — 两个条件都满足时才返回 TRUE

OR(或) :[ condition1 ] || [ condition2 ] — 任一条件满足时返回 TRUE

示例:


六、双括号和双方括号
双括号 (( expression )) — 高级数学运算
test 命令只能做简单的整数比较,而双括号命令支持更多数学运算符,且不需要转义大于号和小于号。
if (( $num > 10 )); then
echo “num 大于 10”
fi

if (( $num % 2 == 0 )); then
echo “num 是偶数”
fi
双括号中支持的运算符包括:++、–、!、~、**(幂运算)、<<、>>、&、|、&&、|| 等。

双方括号 [[ expression ]] — 高级字符串比较
双方括号支持模式匹配(如通配符),且不需要转义大于号和小于号。
if [[ $str == “hello” ]]; then
echo “字符串是 hello”
fi

#使用通配符进行模式匹配
if [[ $str == h* ]]; then
echo “字符串以 h 开头”
fi

http://www.jsqmd.com/news/1165619/

相关文章:

  • Hive 小文件治理 3 大方案对比:CONCATENATE vs INSERT OVERWRITE vs 自动合并参数
  • 从“算法内卷”到“可信易用” 东软多模态医学人工智能平台开启无代码科研新时代
  • 【AI编程】---AI编程之工作流 bmad快速上手
  • MTK安全启动分析1:Preloader启动汇编详解
  • UABEA深度实践:Unity资源逆向工程的终极指南
  • Unity项目导出微信小游戏全流程:从方案选型到性能优化实战
  • RAG 在前端知识库中的应用:技术文档检索增强生成的落地要点
  • 2026数字经济奖项技术解读:AI大模型、多模态与行业落地趋势
  • 大模型提示工程攻击:从可信场景到恶意执行的五步推演
  • TypeScript Proxy 13种陷阱方法详解:从 get/set 到 construct/apply
  • 亚马逊自研AI芯片战略解析:端侧计算如何重塑智能硬件体验
  • 重塑Web3安全防线:Vkey验证器正式登陆安卓与iOS平台,开启数字资产防护新纪元
  • TCP/IP 协议栈 5 层模型实战:从 HTTP 请求到 ARP 解析的完整抓包分析
  • 6J1 vs 6J2 vs 5654:3款五极管参数对比与替换指南(附实测曲线)
  • 海外APP小程序开发 选对公司,省一半麻烦
  • 新品 | 三恩时TS1060分光密度仪,一机覆盖平版装潢印刷品色密度与色差检测
  • 2026年7月最新昆明雷达官方售后客户服务热线与维修网点地址汇总 - 亨得利钟表维修中心
  • 5款免费macOS系统优化工具:让你的Mac运行如新
  • 大数据计算机毕设之基于 Python 的抖音时尚女装评论情感分类系统的设计与实现 基于 Python 的女装抖音评论数据清洗与分析系统(完整前后端代码+说明文档+LW,调试定制等)
  • 什么是网络验证系统与卡密系统?——软件收费化与版权保护终极指南
  • AD7490与PIC18F86J16构建高精度数据采集系统
  • 【SpringAI 入门06】传统应用和大模型应用
  • RS232/RS422/RS485 接口对比与 FPGA 实现:3 种电平转换方案与抗干扰分析
  • 面试官问:你对数据治理怎么看
  • 科研AI协作新范式:构建可验证的指令操作系统
  • GIS基础原理与技术实践》配套案例(Python版)
  • 张家界众腾国旅定制游靠谱吗?本地导游玲玲一对一规划行程,不赶路不踩坑的深度玩法怎么约? - 实用旅游攻略分享
  • 广西洪灾“救援航母”刷屏,救灾夜场还有什么硬核科技?
  • 模电反馈深度解析:从瞬时极性法到环路增益的5个关键计算
  • MKV42F128VLH16与CMT-8540S-SMT的嵌入式音频方案