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

Shell结构化命令完整学习笔记

在Shell脚本编写过程中,结构化命令是实现程序逻辑分支、条件判断的核心工具,能够让脚本根据不同执行结果、数据内容、文件状态自动选择执行流程,摆脱命令顺序执行的单一模式,也是Linux自动化脚本开发的基础内容。

最基础的结构化逻辑由if-then语句构成,和其他编程语言的if判断逻辑存在本质区别,Shell中的if并不会直接判断等式真假,而是会执行if后方跟随的完整命令,依靠这条命令的退出状态码决定分支走向。当命令执行正常,退出状态码为0时,then区块内的所有指令会被执行;若命令执行失败,返回非0状态码,系统会直接跳过then中的代码,向后继续读取脚本内容。同时语法支持简写形式,通过分号分隔命令,将then与if写在同一行,简化代码排版,两种书写方式执行效果完全一致。

单纯的if-then只能处理命令执行成功的场景,无法对执行失败的情况做出响应,if-then-else语句补足了这一短板,当if后的命令运行异常时,程序会自动跳转至else区块执行预设指令,实现两种结果的分支处理。如果业务场景存在三种及以上判断情况,重复嵌套if会让代码冗余杂乱,elif关键字可以无缝延续else分支,串联多层判断条件,依次匹配不同场景,完成多分支逻辑编写,让代码结构更加简洁清晰。

if语句仅能识别命令的退出码,无法直接对数字、文本、文件状态做对比,test命令填补了这一空白,它专门用于自定义条件检测,条件成立时返回0,条件不成立返回非0值,完美适配if分支逻辑。test拥有两种书写形式,完整书写为test加条件,简写形式使用方括号替代,使用方括号时必须保证括号和内部条件之间保留空格,缺少空格会直接报语法错误。test能够覆盖三类高频判断场景,分别是数值比较、字符串比较、文件状态比较。

数值比较仅支持整数运算,无法识别浮点小数,一旦传入小数数值执行对比,脚本会直接抛出整数表达式预期的报错信息。内置多组对比参数,可完成相等、大于、大于等于、小于、小于等于、不相等的数值校验,满足基础数字逻辑判断需求。

字符串对比会严格区分大小写、标点符号,完全按照字符原始内容匹配;判断字符串大小顺序时,大于、小于符号需要添加转义符,排序规则和sort命令相反;内置-n、-z两个参数专门检测字符串长度,-n判断字符串长度不为空,-z判断字符串为空,常用于变量前置校验,避免空变量引发脚本异常。

文件状态检测可以读取Linux文件系统的文件、目录属性,能够判断目标路径是否存在、是普通文件还是文件夹、文件是否可读、可写、可执行,同时支持校验文件归属用户、用户组,还能对比两个文件的创建修改时间,判断文件新旧,在日志、配置文件自动化处理脚本中使用频率极高。

单条test条件只能完成单一校验需求,复合条件测试借助布尔逻辑实现多条件同时判断,两种逻辑运算符分别为逻辑与、逻辑或。逻辑与要求前后两组test条件全部成立,整体判断结果才为真;逻辑或仅需要任意一组条件成立,整体判断结果即为真,多条件组合时每组测试条件需要独立使用方括号包裹。

基础test仅能完成简单对比运算,双括号与双方括号提供了更强大的拓展能力。双括号用于高级数学表达式运算,支持自增、幂运算、位移、逻辑运算等复杂数学操作,内部大于、小于符号无需额外转义,算术相关判断优先选择双括号语法。双方括号侧重字符串模式匹配,相比普通方括号语法容错性更高,专门用于复杂文本匹配场景,规避普通字符串对比容易出现的语法漏洞。

在实际脚本开发中,各类结构化命令可以互相嵌套使用,在if内部再次编写完整的if判断语句,实现多层级逻辑校验,结合文件检测、数值对比、复合条件、高级括号运算,能够搭建完整、健壮的自动化脚本。实操时通过终端直接生成脚本文件,赋予执行权限后运行查看输出,浮点数值对比报错、多层分支输出、文件状态检测结果都可以作为实操截图素材,完整记录每一类语法的运行效果,梳理成完整的知识体系,清晰区分各类判断语法的适用场景、参数用法与使用注意事项,方便后续快速查阅复用。

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

相关文章:

  • Ubuntu 22.04 + ROS 2 Humble 项目通过 TRAE 改成 Ubuntu 202.04 + ROS 1 Noetic 项目的SKLL技能
  • 百万级 JSON 数据同步优化:游标分页、分批聚合与断点续传
  • 如何快速掌握SRWE:打破Windows窗口限制的完整操作指南
  • 二阶倒立摆状态观测器设计:全阶与最小阶(3阶)观测器 MATLAB 实现与误差分析
  • 自己动手写一个spring之MVC_3
  • 直流负载管理优化:G6D-ASI继电器与CEC1302控制器的应用
  • Davinci
  • 消息发送的速率自适应:从固定间隔到 429 自愈的演进实践
  • 终极暗黑破坏神2现代优化方案:D2DX技术深度解析与实战指南
  • 大数据毕设选题推荐:基于 Python 的高校招聘薪资数据统计分析系统的设计与实现 基于 Python 的高校岗位分类与智能分析平台【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 手机版行情列表里品种太多太乱,福汇 手机端 MT4 交易列表怎么精简?
  • Edge 148工作区V2与Copilot新页:AI原生浏览器架构解析
  • TLA2518 ADC与MK64FX512VDC12微控制器的信号采集方案
  • AI泡沫与信贷风险:技术热潮下的金融风险分析
  • USB 2.0 协议栈实战:从域、包到事务的3层数据流解析(附抓包分析)
  • STM32F745ZG与AD5593R的硬件协同设计与驱动开发
  • 2026年AI应用开发技术路线:从LLM到企业级智能应用
  • 2026 年 7 月新发布:武陵源诚信的爬坡式输送带订制厂家选型指南,谁把它卡在45度角?传送带崩裂的瞬间,老板脸色煞白 - 企业推荐官【认证官方】
  • GESP2026年6月认证C++八级( 第三部分编程题(1、线网建设))精讲
  • KMP next 数组 4 种实现对比:从 -1 到 nextval 的 3 种代码差异与性能分析
  • 全球化软件定制服务商,怎么选,看什么?
  • Unity渲染命令生成全流程解析:从Draw Call原理到性能优化实战
  • GPT-5.6 三档模型详解:Sol、Terra、Luna 区别、场景与选型建议
  • 企业微信API二次开发:集团并购几十万私域客户大迁移,你的ID映射引擎会乱码吗?
  • 高精度ADC与MCU在信号采集系统中的应用设计
  • 激光驱动电路 3 类方案对比:从 1A 压降到电容放电,实测 5% 电压波动
  • 学龄儿童防晒霜选哪款?2026实测:兼顾防护力与清爽肤感不闷痘
  • 盘点天花板skills-Superpowers中的坑
  • 愿你毕业之时,仍怀滚烫初心——给毕业时我的一封信
  • 梆梤加固逆向实战:从特征识别到内存Dump的完整脱壳分析