news 2026/7/11 22:22:42

Shell 结构化命令学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell 结构化命令学习

Shell 结构化命令学习

一、完整知识框架梳理
本次课程核心是 Shell 脚本里的结构化逻辑语句,让脚本不再是单纯顺序执行命令,能够根据不同条件走不同执行流程,整体分为五大板块:if 分支语句、test 测试判断、三类条件比较、复合布尔条件、双方括号与双括号高级判断,所有操作都在 Xshell 连接 Linux 虚拟机完成,下面分模块梳理概念、用法与实操要点。
(一)if 系列分支语句
if 是脚本最基础的结构化命令,核心逻辑和普通编程语言不一样:bash 的 if 后紧跟一条命令,靠这条命令的退出状态码判断是否执行 then 内代码,返回码 0 代表条件成立,非 0 则跳过。
基础 if-then
语法有两种写法,分行版:
plaintext
if 命令
then
执行语句
fi
简写同行版用分号分隔 if 与 then:if 命令; then 语句; fi
只有条件成立时才运行 then 中的代码,没有备选执行分支。
2. if-then-else 双分支
当命令执行失败、返回非 0 状态码时,会自动执行 else 里的内容,实现 “成立做 A,不成立做 B” 的逻辑。
3. if-elif 多分支
多个判断条件依次匹配,不用多层嵌套 if,从上到下依次判断,匹配成功就执行对应 then,全部不匹配则可搭配 else 兜底。
4. if 嵌套
在 if、elif、else 内部继续写 if 判断,实现多层级的复合逻辑。
(二)test 测试命令
单纯 if 只能判断命令是否运行成功,想要比较数字、文本、文件状态,必须依靠 test 命令,有两种等价写法:
test 条件
[ 条件 ] 方括号格式,日常使用更多
重点注意:方括号左右两侧必须留空格,否则脚本直接报错。
test 满足条件返回 0,不满足返回非 0,刚好适配 if 的判断逻辑。test 一共支持三类判断:数值比较、字符串比较、文件状态判断。

  1. test 数值比较(仅支持整数)
    所有比较符统一以减号开头,不能直接用 >、<,浮点数字会直接报错。
    -eq:等于
    -ne:不等于
    -gt:大于
    -ge:大于等于
    -lt:小于
    -le:小于等于
  2. test 字符串比较
    区分大小写、标点符号,大于小于符号需要加反斜杠转义;还能检测字符串是否为空。
    = 、!=:判断字符串相等 / 不等

、<:按 ASCII 码比较字符串大小
-n:字符串长度不为空(有内容)
-z:字符串长度为空(无内容)

  1. test 文件 / 目录状态判断
    用来检测路径是否存在、文件类型、读写执行权限、文件新旧等,常用参数:
    -e:文件 / 目录存在
    -d:路径是目录
    -f:路径是普通文件
    -r /-w/-x:文件可读、可写、可执行
    -nt /-ot:文件更新、文件更旧
    (三)复合条件逻辑(布尔运算)
    多个 test 条件组合判断,两种逻辑符:
    逻辑与 &&:[条件1] && [条件2],两个条件全部成立才返回真;
    逻辑或 ||:[条件1] || [条件2],任意一个条件成立就返回真。
    (四)双方括号 [[]] 与双括号 (( )) 高级判断
    双方括号 [[ 条件 ]]
    是 bash 独有的增强字符串判断,不用转义大小于号,支持通配符模式匹配,适合用户名、文本模糊匹配场景。
    双括号 (( 表达式 ))
    专门做高级数学运算与数值判断,支持自增、幂运算、位运算、逻辑与或,里面的大于小于号不需要转义,仅支持整数运算。
    (五)配套知识点总结
    fi 是 if 语句结束标记,每一个 if 必须对应一个 fi;
    test 只支持整数,小数运算仍需要 bc 工具;
    普通 [] 做字符串对比时,>、< 必须加 \ 转义,[[ ]] 不用;
    双括号内部可以直接写数学公式,不用搭配 $[]、expr。

二、Xshell 分步实操流程
实操 1:基础 if-then、if-else、elif 多分支
新建脚本 if_base.sh,先写基础 if-then,用 pwd 命令作为判断条件,命令正常执行就打印提示文字;
故意写一条不存在的错误命令放到 if 后,验证命令失败时 then 内代码不会运行;
改写脚本增加 else 分支,区分命令成功、失败两种输出;
增加 elif 实现多分支,判断当前登录用户名,匹配 zhang、lilei 分别输出提示,不匹配走 else;
截图每一段脚本运行结果,对比成功、失败、多分支三种输出效果。
实操 2:test 数值比较实操
新建 test_num.sh,定义两个整数变量,用[ 变量 -gt 数字 ]判断大小;
分别测试 - eq 相等、-ne 不等、-lt 小于等各类数值运算符;
尝试给变量赋值小数 5.555,运行脚本观察报错,验证 test 不支持浮点数;
截图整数正常判断、浮点报错两段界面。
实操 3:test 字符串空值、大小对比
新建 test_str.sh,分别定义有内容、空字符串两个变量;
使用 - n、-z 判断字符串是否为空,打印对应提示;
两组大小写不同的字符串,用>、<对比大小,观察大小写排序规则;
截图字符串匹配、空值检测的运行输出。
实操 4:test 文件目录状态检测
新建 test_file.sh,检测家目录 $HOME 是否存在、是否为目录;
手动创建 test.txt 文件,用 - e、-f、-w 分别检测文件存在、普通文件、可写权限;
新建两个文本,用 - nt、-ot 对比文件新旧;
修改文件权限,验证 - r、-x 可读可执行判断结果,截图全部检测输出。
实操 5:复合条件 &&、|| 逻辑判断
编写脚本,同时判断目录存在 && 目录内文件可写,两个条件同时满足才输出提示;
使用 || 逻辑或,判断文件存在或者目录存在,满足其一就打印信息;
修改文件权限,分别制造 “双条件成立、一个成立、全部不成立” 三种场景,截图不同结果。
实操 6:双方括号 [[]]、双括号 (( )) 高级运算判断
双括号 (()):定义数字变量,做平方、自增运算,直接用 > 判断数值大小,不用转义;
双方括号 [[]]:匹配登录用户名,不用转义比较符号,做模糊文本匹配;
对比普通 [] 和 [[]] 字符串对比写法差异,截图两段脚本执行结果。
实操 7:if 嵌套综合练习
在 else 分支内部再写一层 if 判断,先判断用户是否为指定账号,账号匹配后再判断家目录文件是否存在,多层条件叠加,完整运行并截图最终输出。

三、实操学习总结
结构化 if 语句是脚本自动化的核心,有了条件判断,脚本才能根据服务器、文件、用户的不同状态执行不同操作,不再只能死板顺序运行。
基础 if 依靠命令退出码判断,想要自定义数值、文本、文件判断,必须搭配 test/[];写方括号判断千万不要忘记左右空格,很容易踩坑。
test 分为数值、字符串、文件三类判断,适用场景清晰:数字对比用 - gt/-eq,文本判空用 - n/-z,检测文件权限用 - d/-f/-w。
普通 [] 对比字符串大小要转义符号,日常做字符串匹配优先用 [[]];复杂数学计算、数值判断直接用 (( )),写法更简洁,支持幂运算、自增等高级运算。
多分支判断用 elif 代替多层 if 嵌套,代码可读性更高;多层逻辑叠加可以用 &&、|| 组合多个条件,简化脚本代码。
实操踩坑提醒:test 只支持整数,小数会直接报错;if 语句结尾必须写 fi,漏写会直接报语法错误;逻辑与 && 需要两个条件全部成立才执行代码。

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

STM32F030R8与ADS122U04高精度数据采集系统设计

1. 项目背景与核心需求在工业测量和嵌入式系统开发中&#xff0c;将模拟信号转换为数字信号是一个基础但至关重要的环节。ADS122U04作为TI公司推出的24位Δ-Σ型ADC芯片&#xff0c;配合STM32F030R8这款性价比极高的Cortex-M0微控制器&#xff0c;能够构建高精度、低功耗的模拟…

作者头像 李华
网站建设 2026/7/11 22:21:04

AI为云厂商带来增长?云计算大盘为何“局部热、整体冷”?

AI引发云厂商叙事逻辑变化2026年过半&#xff0c;中国云计算行业叙事逻辑生变。观察各大云厂商公开语境&#xff0c;发现大家默契减少对传统TOB算力增长的单一描绘&#xff0c;新概念频频亮相。2026年一季度&#xff0c;阿里云AI相关产品连续11个季度三位数增长&#xff0c;占外…

作者头像 李华
网站建设 2026/7/11 22:20:35

XTerminal使用流程

定义XTerminal 是国产免费跨平台 SSH / 远程终端管理软件&#xff0c;面向运维、后端、嵌入式开发&#xff0c;一站式替代 Xshell、FinalShell、MobaXterm&#xff0c;支持 Windows/macOS/Linux 全平台统一界面XTerminal 是Linux SSH远程连接工具XTerminal&#xff0c;点击exe进…

作者头像 李华
网站建设 2026/7/11 22:16:13

TMC7300与PIC18F2680组合实现高效直流电机控制

1. TMC7300与PIC18F2680的黄金组合解析有刷直流电机&#xff08;BDC&#xff09;在工业自动化、消费电子和机器人领域占据着重要地位&#xff0c;但如何实现稳定控制一直是工程师面临的挑战。TMC7300这款高度集成的电机驱动芯片与PIC18F2680微控制器的组合&#xff0c;恰好解决…

作者头像 李华