news 2026/8/12 7:17:40

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/8/11 9:14:02

Excalidraw展示用户增长漏斗:转化路径分析

Excalidraw 中的用户增长漏斗&#xff1a;用 AI 实现转化路径的智能可视化 在产品迭代节奏越来越快的今天&#xff0c;如何快速、清晰地表达一个复杂的业务逻辑&#xff0c;成了跨职能协作中的关键挑战。尤其是在用户增长领域&#xff0c;从曝光到付费的每一步转化都牵动着团队…

作者头像 李华
网站建设 2026/8/10 22:02:02

43、打印机、扫描仪和传真机的安装与共享指南

打印机、扫描仪和传真机的安装与共享指南 在日常办公和生活中,打印机、扫描仪和传真机是常见的设备。为了让这些设备能够正常工作,我们需要正确地进行安装和配置。下面将详细介绍这些设备的安装、共享以及连接的具体步骤。 1. 手动安装扫描仪 手动安装扫描仪可以按照以下步…

作者头像 李华
网站建设 2026/8/12 4:49:06

44、打印机、扫描仪和传真机的使用与管理指南

打印机、扫描仪和传真机的使用与管理指南 在日常办公和生活中,打印机、扫描仪和传真机是常见的设备。正确地配置、使用和管理这些设备,能够提高工作效率,避免不必要的麻烦。下面将详细介绍这些设备的共享、属性配置、作业管理等方面的内容。 打印机共享连接步骤 要将网络…

作者头像 李华
网站建设 2026/8/9 8:42:53

Excalidraw辅助决策分析:SWOT与四象限应用

Excalidraw辅助决策分析&#xff1a;SWOT与四象限应用 在一次产品战略会上&#xff0c;团队花了40分钟才把一张SWOT分析图画整齐——框线对齐、字体统一、颜色协调。可当终于开始讨论时&#xff0c;大家的注意力早已被排版消耗殆尽。这种场景并不陌生&#xff1a;我们总是在“如…

作者头像 李华
网站建设 2026/8/9 2:46:55

C++内存四区与new操作符详解

在 C 编程中&#xff0c;内存管理是基础中的基础&#xff0c;而理解内存分区模型和动态内存分配机制&#xff0c;是写出高效、稳定代码的关键。本文基于C 核心内容&#xff0c;详细拆解 C 程序运行时的四大内存区域&#xff0c;并深入讲解动态内存分配的核心工具 ——new操作符…

作者头像 李华
网站建设 2026/8/11 18:47:52

Python解包及反编译: PyInstaller Extractor+uncompyle6

Python解包及反编译: PyInstaller Extractoruncompyle6 python exe 反编译 pythonexe解码 1、安装pyinstxtractor 新建一个py文件pyinstxtractor.py,然后将下面的内容拷贝进去 然后就安装好了&#xff0c;要使用的时候与待解包的exe文件放在同一文件夹即可 ""&q…

作者头像 李华