news 2026/6/10 13:06:27

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/6/10 7:25:06

FlutterOpenHarmony进度指示器组件开发

前言 进度指示器是应用中反馈操作状态的重要组件&#xff0c;它告诉用户当前正在进行的操作以及完成进度。在笔记应用中&#xff0c;文件上传、数据同步、批量操作等场景都需要使用进度指示器。一个设计良好的进度指示器应该清晰地传达进度信息&#xff0c;同时不过度干扰用户的…

作者头像 李华
网站建设 2026/6/10 15:49:00

Excalidraw图解搜索引擎:倒排索引工作原理

Excalidraw图解搜索引擎&#xff1a;倒排索引工作原理 在搜索引擎背后&#xff0c;有一个看似简单却极其强大的数据结构——倒排索引。它让百万级文档的关键词查询能在毫秒内完成。但如果你曾试图向同事解释“为什么搜‘猫’能瞬间找出所有相关文章”&#xff0c;就会发现&…

作者头像 李华
网站建设 2026/6/10 2:18:05

C语言加法函数实现详解

模块四------模块化程序设计01------函数的定义&#xff08;第一题&#xff09;(本人答案与分析&#xff09;1.自定义一个相加函数&#xff0c;实现对输入的两个数的相加&#xff0c;并在主函数中输出两个数的和代码如下&#xff1a;#include <stdio.h> int add(int a,in…

作者头像 李华
网站建设 2026/6/10 15:50:25

Excalidraw图层管理:避免元素重叠混乱

Excalidraw 图层管理&#xff1a;如何在无界面干预下实现清晰的元素层级控制 想象这样一个场景&#xff1a;你正在和团队远程协作绘制一个微服务架构图。画布上已经堆满了容器、服务节点、连接线和注释标签&#xff0c;突然你想修改最开始画的那个“云平台”背景框——但它早就…

作者头像 李华
网站建设 2026/6/10 15:57:59

Excalidraw团队定价方案:中小企业如何节省开支?

Excalidraw团队协作方案&#xff1a;中小企业如何以极低成本实现高效可视化协同&#xff1f; 在远程办公常态化、敏捷开发深入落地的今天&#xff0c;一个看似不起眼但影响深远的问题浮出水面&#xff1a;如何让团队成员快速对齐复杂想法&#xff1f; 无论是产品原型讨论、系统…

作者头像 李华
网站建设 2026/6/10 15:48:03

与AI相比,人机环境系统智能更像是一种“活”的智能

与AI相比&#xff0c;人机环境系统智能的“活的”特性&#xff0c;本质在于其以“人-机-环境”三元交互为核心&#xff0c;实现了生物智能般的“活性”——即动态适应、价值理解、意向性算计与自我演化的能力&#xff0c;而传统AI&#xff08;如具身智能、大模型&#xff09;则…

作者头像 李华