news 2026/4/3 5:00:29

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/4/1 20:37:24

Excalidraw呈现NLP处理链:文本分析步骤可视化

Excalidraw呈现NLP处理链&#xff1a;文本分析步骤可视化 在自然语言处理&#xff08;NLP&#xff09;项目开发中&#xff0c;一个常见的挑战是&#xff1a;如何让团队成员——无论是算法工程师、产品经理还是前端开发者——都能快速理解一条复杂的文本处理流程&#xff1f;从…

作者头像 李华
网站建设 2026/4/1 14:55:06

Flutter与OpenHarmony个人中心菜单组件实现

前言 个人中心菜单是"我的"页面中用户访问各项功能的入口集合。它通常以列表或网格形式展示&#xff0c;包括我的订单、我的收藏、我的作品、设置等常用功能。本文将详细介绍如何在Flutter和OpenHarmony平台上实现一个设计美观、交互流畅的个人中心菜单组件。 菜单组…

作者头像 李华
网站建设 2026/4/3 3:23:49

#读书思考#我们中国人的社会,内核从来是“万事全靠君子自强不息”,放至任何阶层都是如此。哪怕你拥有再好的背景、出生、天赋、造化,你都要持续保有一份积极向上的心态。如此,你才能接得住上述这一切。

#读书思考#等到有一天&#xff0c;你抵达了一定的社会段位后&#xff0c;你就会明白一件事儿。我们中国人的社会&#xff0c;内核从来是“万事全靠君子自强不息”&#xff0c;放至任何阶层都是如此。哪怕你拥再好的背景、出生、天赋、造化&#xff0c;你都要持续保有一份积极向…

作者头像 李华
网站建设 2026/3/27 14:15:38

MATLAB矩阵的一些用法

1.写在前面虽然很基础&#xff0c;但是还是想再复习一下。2.矩阵的序号和下标%% 矩阵的序号和下标 %注意&#xff0c;在matlab中矩阵的序号是按列存储的 %以A[1,2,3;4,5,6;7,8,9;10,11,12]为例 A[1,2,3;4,5,6;7,8,9;10,11,12]; [m,n]size(A); aA(4,2) ;%11 bA((2-1)*m4); %11 %…

作者头像 李华
网站建设 2026/3/14 16:39:34

AI应用架构师指南:半导体质检的自动化流水线

AI应用架构师指南&#xff1a;半导体质检的自动化流水线 引言 痛点引入 在半导体制造领域&#xff0c;质量检测是确保产品性能和可靠性的关键环节。传统的半导体质检主要依赖人工操作&#xff0c;质检员通过显微镜等工具对半导体芯片进行逐一检查&#xff0c;识别诸如芯片表面的…

作者头像 李华
网站建设 2026/3/12 14:54:53

Excalidraw模拟物理模型:教学演示直观化

Excalidraw模拟物理模型&#xff1a;教学演示直观化 在高中物理课堂上&#xff0c;老师正讲解“斜面上物体的受力分析”。传统做法是边讲边画——先画一个三角形表示斜面&#xff0c;再画方块代表物体&#xff0c;最后用箭头标出重力、支持力和摩擦力。这个过程不仅耗时&#x…

作者头像 李华