上一篇文章把构建基本shell脚本从创建到执行、从变量到数学运算、从bc浮点计算到退出状态码整个过了一遍总算是能写一些简单的脚本了。但有一个问题始终绕不过去之前写的脚本都是从头到尾顺序执行每一条命令都会跑一遍没有任何选择和判断的能力。比如脚本里想根据不同的情况做不同的事情或者想检查某个文件存不存在再决定要不要继续执行这些需求之前的写法完全满足不了。课程推进到了结构化命令这一章主要内容就是if-then语句、test命令和各种条件测试学完之后脚本终于有了长脑子的感觉。先说一下if-then语句的基本结构。在其他编程语言中if语句后面跟的是一个等式该对象的值若为TRUE则执行接下来的命令若为FALSE则不执行。但bash shell的if语句有点不一样它会运行if后面的那个命令如果该命令的退出状态码是0即命令成功运行则位于then后面的命令才会被执行。如果该命令的退出状态码是其他值then后面的命令就不会被执行bash shell会跳过这个if-then语句去执行脚本中后面的命令。这个设计刚开始让我有点不习惯因为直觉上以为if后面应该是条件表达式而不是命令但理解了退出状态码的概念之后就明白了bash就是在检查命令是否执行成功。if-then语句的结束标记是fi表示这个语句块到此结束。语法格式上可以把then和if放在同一行中间用分号隔开这样写起来更紧凑比如if command; then。当需要两种选择时if-then-else语句就派上用场了。当命令返回一个非零退出状态码时if-then-else语句能够执行else部分的命令。这个很好理解条件成立走then条件不成立走else。如果分支更多可以用elif继续扩展这样就可以避免书写多个独立的if-then语句结构更清晰。if-then语句只能测试命令的退出状态码但很多时候我们想测试的是其他条件比如两个数的大小关系、字符串是否相等、文件是否存在。这时候test命令就出场了。test命令提供了在if-then语句中测试不同条件的途径如果test命令中列出的条件成立test命令就会退出并返回退出状态码0这样if-then语句就与其他编程语言中的if-then语句以类似的方式工作了。如果条件不成立test命令就会返回非零的退出状态码。test命令有两种语法格式一种是if test condition另一种是用方括号代替test命令写作if [ condition ]。注意方括号前后必须用空格和里面的条件隔开否则无法正常运行。test命令可以判断三类条件数值比较、字符串比较和文件比较。数值比较包括-eq等于、-ne不等于、-gt大于、-ge大于等于、-lt小于、-le小于等于只能进行整数运算比较不能处理浮点数值。字符串比较包括相等性比较、顺序比较和大小比较字符串相等性比较时标点和大小写都会考虑在内字符串顺序比较时大于号和小于号必须用反斜杠转义。需要注意大小写字母排序与sort命令恰好相反因为test使用的是ASCII顺序而sort使用的是系统本地化设置。-n和-z可以检查一个变量是否含有数据-n检查字符串长度是否非零-z检查字符串长度是否为零。文件比较测试的是Linux文件系统上文件和目录的状态常用的有-d检查文件是否存在且为目录、-e检查文件是否存在、-f检查文件是否存在且为文件、-r检查文件是否存在且可读、-w检查是否存在且可写、-x检查是否存在且可执行、-s检查文件是否存在且非空。当需要同时检查多个条件时复合条件测试就很有用了。可以使用布尔逻辑来组合测试表示与即两个条件都要满足才返回TRUE||表示或只要满足其中一个就返回TRUE。比如[ condition1 ] [ condition2 ]表示condition1和condition2同时成立[ condition1 ] || [ condition2 ]表示至少有一个成立。双括号和双方括号是bash提供的更高级的测试方式。双括号命令(( expression ))允许在比较过程中使用高级数学表达式而test命令只能在比较中使用简单的算术操作。双括号提供了更多的数学符号比如、--、**等而且不需要将大于号或小于号转义。双方括号命令[[ expression ]]提供了模式匹配功能可以对标准字符串进行比较支持正则表达式匹配。把今天的内容和之前学的串在一起看之前写的脚本都是一条道走到黑现在有了if-then、test、复合条件这些工具脚本终于能根据不同情况做出不同的反应了。比如可以写一个脚本先检查某个文件是否存在存在就备份不存在就报错退出。可以检查用户输入的数字是否在合理范围内不在就提示重新输入。可以检查当前运行的用户是不是root不是就拒绝执行。这些能力让脚本从顺序执行的命令列表真正变成了具备判断逻辑的程序。后续再写脚本的时候遇到需要判断的场景就有办法了。希望这篇文章能给正在学习结构化命令的同学一些参考有问题欢迎来交流。
系统化学术能力自检五大标准 前言判断自己是否接受过完整系统的学术训练,可通过 5 项核心能力自查,区分 “被动完成任务” 与 “拥有通用科研底层能力”。真正的系统训练,核心是沉淀一套可迁移、可复用的科研逻辑,而非只会单一课题、单一操作。一、闭环研究能…
TB6593FNG与PIC32的直流电机控制系统设计与优化 1. 项目背景与核心组件解析在工业自动化与精密控制领域,直流电机因其优异的调速性能和转矩特性一直是关键的执行元件。本次项目采用TB6593FNG驱动芯片与PIC32MX695F512L微控制器组合方案,旨在构建一套高响应、可编程的直流电机控制系统。这个组合的独特之…
iCloud隐私邮箱批量生成终极指南:三步打造你的数字隐身衣 iCloud隐私邮箱批量生成终极指南:三步打造你的数字隐身衣 【免费下载链接】hidemyemail-generator Generator for Apples HideMyEmail service. Generate multiple iCloud emails with ease! 项目地址: https://gitcode.com/gh_mirrors/hi/hidemyemail-generator …
NVIDIA-Nemotron-3-Nano-30B-A3B-OptiQ-4bit模型架构:128专家稀疏MoE系统解析 [特殊字符] NVIDIA-Nemotron-3-Nano-30B-A3B-OptiQ-4bit模型架构:128专家稀疏MoE系统解析 🚀 【免费下载链接】NVIDIA-Nemotron-3-Nano-30B-A3B-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/NVIDIA-Nemotron-3-Nano-30B-A3B-OptiQ-4b…
CANN/ops-cv ROIAlign反向传播算子 ROIAlignGrad 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv 产品支持情况 产品是否支持Atlas A2 训练系列产品/Atlas A2 推理系列产品√ 功能说明 算…
开源163MusicLyrics:打破音乐平台壁垒的歌词提取革命 开源163MusicLyrics:打破音乐平台壁垒的歌词提取革命 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 你是否曾为寻找一首歌的完整歌词而辗转多个平台…
Gepard API开发实战:构建实时语音对话系统的10个关键技巧 Gepard API开发实战:构建实时语音对话系统的10个关键技巧 【免费下载链接】gepard-1.0 项目地址: https://ai.gitcode.com/hf_mirrors/nineninesix/gepard-1.0 想要构建一个真正实时响应的语音对话系统吗?Gepard-1.0正是你需要的解决方案&#x…
电子取证实战:从JAR包反编译到数据库还原的5步网站入侵溯源 电子取证实战:从JAR包反编译到数据库还原的5步网站入侵溯源在数字化犯罪日益猖獗的今天,电子取证技术已成为打击网络犯罪的关键手段。本文将深入剖析一起虚拟币诈骗网站的入侵溯源全过程,通过五个关键步骤带您掌握从Java应用逆向分析到数据库…
ZangoDB TypeScript支持:如何利用zangodb.d.ts提升开发体验 ZangoDB TypeScript支持:如何利用zangodb.d.ts提升开发体验 【免费下载链接】zangodb MongoDB-like interface for HTML5 IndexedDB 项目地址: https://gitcode.com/gh_mirrors/za/zangodb ZangoDB是一个为HTML5 IndexedDB提供MongoDB式接口的JavaScript库&a…
2026年7月最新金华宇舶官方售后客户服务热线与维修网点地址汇总 - 亨得利官方服务中心 金华宇舶官方售后客户服务热线与维修网点地址信息是每一位宇舶腕表拥有者都极为关注的核心内容。作为瑞士高端制表品牌,宇舶以其精湛工艺与创新设计闻名,确保腕表始终处于理想运行状态,离不开官方售后渠道的合规支持…
HS2汉化补丁终极指南:一键解锁Honey Select 2完整中文体验 HS2汉化补丁终极指南:一键解锁Honey Select 2完整中文体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为Honey Select 2的日文界面而苦恼吗…
怎么寄快递才能便宜呢?2026年7月寄快递省钱攻略 - 生活情报姬 同一箱老家特产,同事花22寄的,我花9块。不是我路子野,是我按场景选了渠道。寄快递便宜不便宜,一半看你会不会"对号入座"——退换货、卖闲置、寄礼物,招数都不一样。 分场景才最省 丰火递想不管啥场景都…
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复 如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…
企业AI落地困境与AgenticOps实践指南 1. 企业AI落地的现实困境与破局之道过去两年,大模型技术呈现爆发式增长,从GPT-3到GPT-4,从LLaMA到DeepSeek,模型参数规模从百亿级跃升至万亿级,多模态能力从单一文本扩展到图文音视频的综合处理。然而在企业应用层面&a…
[C++]内存管理:串顺序存储的内存回收 在串(字符串)的顺序存储中,内存回收的方式取决于字符串的存储方式以及所使用的编程语言和相关库。以下以 C 为例进行说明,因为 C 对内存管理有较为直接的控制。 1. 基于 char 数组的串顺序存储 如果使用普通的 char 数组来存储字…
移动端游戏功耗测试实战:电流、功率、亮度和场景对比 移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…
足球口袋教练 HarmonyOS 离线应用实战(03/20):ArkUI 首页仪表盘搭建 本文是“足球口袋教练 HarmonyOS 离线应用实战”系列第 3 篇。示例项目是一个 HarmonyOS / ArkTS / ArkUI 编写的离线足球训练助手,围绕真实页面、真实截图和可复现操作展开。 本篇要解决的问题 训练 App 的首页不能只展示欢迎语,它要解决“我现在该点哪…