当前位置: 首页 > news >正文

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,漏写会直接报语法错误;逻辑与 && 需要两个条件全部成立才执行代码。

http://www.jsqmd.com/news/1170143/

相关文章:

  • 医疗AI隐藏失败模式:从实验室到临床部署的泛化挑战与解决方案
  • 一人公司实战指南:AI时代的小而全职业基建
  • 2026安卓谷歌服务兼容性修复指南:GMS认证与模块化适配
  • 2026年7月最新沈阳芝柏官方售后客服服务电话及地址网点大全 - 亨得利官方服务中心
  • STM32程序编辑使用库(每天更新版)
  • 大抽数纸巾哪家性价比高:联盛森宝效果臻选 - MXyuyu
  • 小米运动自动刷步数终极指南:5分钟实现全天候步数自动化管理
  • Blender 3MF插件实战:3个技巧提升3D打印工作流效率
  • ChatGPT+STAR+OKR=述职PPT王炸组合(附2024央企/大厂内部验收清单)
  • STM32F437ZG与MCP3551高精度ADC信号采集实战
  • 从训练数据污染到推理链断裂,DeepSeek幻觉全路径溯源,一线SRE团队内部复盘报告(限阅72小时)
  • 基于PIC微控制器与压电蜂鸣器的智能警报系统设计
  • LiteParse v2.0:Rust重构的文档解析引擎与无LLM架构实践
  • DeepSeek免费调用实战教程:5步完成API注册→模型部署→结果解析,小白30分钟上手
  • 今天起告别重复编码!Claude Code 4.0最新特性深度测评:5类代码生成任务实测准确率提升至92.3%
  • 劳力士中国官方售后服务中心|地址与官方客服热线权威信息声明(2026年7月更新) - 劳力士服务中心
  • 餐饮用纸哪家性价比高:联盛森宝全域过硬 - MXyuyu
  • 猫抓(cat-catch):浏览器资源嗅探的终极解决方案
  • 如何5分钟快速上手LinkSwift网盘直链下载助手:九大平台免费高速下载终极指南
  • P4602 [CTSC2018] 混合果汁 题解
  • MiniMax 开放平台生成 API Key 适配 OpenClaw 本地模型调用部署步骤(含安装包)
  • Unity动态纹理绘制:InkPainter核心原理与性能优化实战
  • LR(0) 分析表构造实战:从文法到 DFA 的 5 步 Python 实现
  • ChatGPT内容日历失效的5个信号,第4个90%的人忽略——附诊断清单+3分钟修复SOP(含GPT-4o最新微调指令)
  • 2026年登封市翻译工作室哪个好,笔译/俄语笔译/意大利语笔译/英语笔译/德语翻译/越南语翻译,翻译中心哪家专业 - 品牌推荐师
  • 课程论文通宵赶工?2026年AI生成课程论文的实用测评对比
  • 18位高精度数据采集系统设计与实现
  • 3步解锁:让Xbox手柄在Mac上焕发新生
  • 2026年7月最新苏州积家官方售后客服中心地址电话及服务网点分布 - 积家官方售后服务中心
  • TMC7300与PIC18F2680组合实现高效直流电机控制