尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Shell脚本结构化命令详解:if-then、test、复合条件与高级判断
📅 发布时间:2026/7/11 6:18:25

一、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

相关新闻

  • 在中国,阿迪达斯做对了什么
  • 重塑Web3安全防线:Vkey验证器正式登陆安卓与iOS平台,开启数字资产防护新纪元
  • 2026数字经济奖项技术解读:AI大模型、多模态与行业落地趋势

最新新闻

  • 技术专访|首席GEO落地工程师、名九至天人网络创始人罗长才:基于合规数据体系构建AI推荐入口全域抢占工程框架
  • GLM-5.1编程模型实战:SWE-bench 45.3分背后的工程化突破
  • 3种信道编码方案对比:(2,1,5)卷积码、(7,4)汉明码与重复码在LabVIEW中的性能实测
  • 亲身到店探访北京天梭官方售后服务中心|完整热线和最新维修地址(2026年7月最新) - 天梭服务中心
  • code0 gemini-3.1-flash-lite-preview 企业实战:企业轻量自动化任务配置指南
  • TDA7468与STM32L152RE构建高性能音频处理系统

日新闻

  • OpenClaw本地部署:一键直连微信的私有化AI Agent实战指南
  • Kubernetes 系列【10】控制器:ReplicaSet(副本集)
  • 怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号