news 2026/3/30 7:52:25

shell脚本中的判断语句

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
shell脚本中的判断语句

Shell 中的判断语句(Conditionals)是控制脚本逻辑的核心。虽然它的功能和 Python 的if类似,但语法结构非常严谨,尤其是空格的要求极其严格。

我们可以把 Shell 的判断语句拆解为:结构比较符文件检查三个部分。


1. 基础语法结构

Shell 的if语句必须以if开头,以fi(if 的反写)结尾。

if[条件];then# 条件为真时执行elif[其他条件];then# 其他条件为真时执行else# 以上都不满足时执行fi

⚠️ 致命细节:[之后和]之前必须有空格

  • 错误:if [$a==$b]
  • 正确:if [ $a == $b ]

2. 数值比较(重点:不同于 Python)

在 Shell 的[ ]表达式中,数字比较不使用><,而是使用字母缩写:

符号含义对应英文Python 对应
-eq等于equal==
-ne不等于notequal!=
-gt大于greaterthan>
-ge大于等于greaterequal>=
-lt小于lessthan<
-le小于等于lessequal<=

例子:

if[$NUM_DEVICES-gt1];thenecho"正在使用多卡训练"fi

3. 字符串比较

字符串比较则使用我们熟悉的符号:

  • ===:等于(注意两边空格)
  • !=:不等于
  • -z:判断字符串是否为(常用语检查变量是否定义)

例子:

if[-z"$EXP_NAME"];thenecho"错误:实验名称不能为空!"exit1fi

4. 文件检查(Shell 的拿手好戏)

这是你在train.sh中最常用的功能,专门用来判断磁盘上的文件状态:

选项作用
-f判断是否为文件且存在 (file)
-d判断是否为目录且存在 (directory)
-e判断是否存在(exists),不管是文件还是目录
-r/-w/-x判断是否有读/写/执行权限

例子(结合你的需求):

# 判断 stats.json 是否存在if[-f"stats.json"];thenecho"文件已找到"elseecho"文件不存在"fi

5. 逻辑组合

如果你需要同时判断两个条件,可以使用:

  • -a(and):逻辑与
  • -o(or):逻辑或

或者使用更现代的[[ ]](双中括号)结构,它支持&&||

# 如果是文件 并且 变量 a 大于 10if[[-f"$FILE"&&$a-gt10]];thenecho"满足双重条件"fi

6. 一个“潜规则”:$?

在 Shell 中,每条命令执行完都会返回一个状态码,存储在$?中。

  • 0:代表成功(True)
  • 非 0:代表失败(False)

这和 Python 的逻辑(0 为假,非 0 为真)是完全相反的,因为在系统层面,报错码通常是 1, 2, 3…,而 0 标志着一切正常。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 0:36:42

Excalidraw绘制机器学习 pipeline:训练部署全流程

Excalidraw绘制机器学习 pipeline&#xff1a;训练部署全流程 在一次跨时区的远程评审会上&#xff0c;算法工程师正试图向运维团队解释模型上线后的流量路径。白板上贴满了手写便签&#xff0c;PPT里的架构图层层嵌套&#xff0c;却依然有人频频发问&#xff1a;“这个特征服务…

作者头像 李华
网站建设 2026/3/13 19:32:55

Excalidraw构建应急响应图:突发事件预案

Excalidraw构建应急响应图&#xff1a;突发事件预案 在一次深夜的线上故障复盘会上&#xff0c;某科技公司的运维团队围坐在虚拟会议室中。屏幕上是一张杂乱无章的PPT流程图——“先通知A&#xff0c;再联系B&#xff0c;如果C没响应就找D”……每个人都在试图回忆自己在应急流…

作者头像 李华
网站建设 2026/3/26 8:24:17

基于Python+大数据+SSM大数据分析与可视化系统(源码+LW+调试文档+讲解等)/大数据分析系统/可视化系统/大数据可视化/数据分析可视化/大数据处理与可视化/大数据分析平台/数据可视化工具

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/3/18 0:53:31

Excalidraw与Confluence整合:文档嵌入方案

Excalidraw与Confluence整合&#xff1a;文档嵌入方案 在技术团队日益依赖可视化协作的今天&#xff0c;一个常见的痛点浮现出来&#xff1a;设计图和文档总是“两张皮”。架构师在白板上画完草图&#xff0c;导出成图片贴进Confluence页面&#xff1b;几天后需求变更&#xff…

作者头像 李华
网站建设 2026/3/29 8:01:04

C++ 核心编程:引用深度解析

引用是 C 对 C 语言的重要扩展&#xff0c;也是面向对象编程中简化语法、提升效率的核心工具。它本质是变量的 “别名”&#xff0c;通过底层指针常量实现&#xff0c;却屏蔽了指针的复杂操作&#xff0c;兼具安全性与易用性。本文基于C核心内容&#xff0c;从基础语法到实战场…

作者头像 李华
网站建设 2026/3/21 7:37:36

Excalidraw展示推荐系统:协同过滤流程拆解

Excalidraw中的协同过滤推荐&#xff1a;让白板“懂你所想” 在远程协作日益频繁的今天&#xff0c;可视化工具早已不只是画图那么简单。一个空白的画布&#xff0c;对新手来说可能是无从下手的焦虑源&#xff0c;而对老手而言也意味着重复劳动——每次都要重头搭建架构图、流程…

作者头像 李华