Shell 判断与循环
Shell 判断与循环语句详解一、判断语句1.if语句基本语法if[条件];then# 条件为真时执行fi完整语法if[条件1];then# 条件1为真elif[条件2];then# 条件2为真else# 都不满足fi示例#!/bin/bashread-p请输入分数: scoreif[$score-ge90];thenecho优秀elif[$score-ge60];thenecho及格elseecho不及格fi嵌套 ifif[条件1];thenif[条件2];thenecho条件1和条件2都满足fifi2.case语句语法case$变量in模式1)命令;;模式2|模式3)命令;;*)默认命令;;esac示例#!/bin/bashread-p请输入 yes/no: answercase$answerinyes|Y|y)echo你选择了是;;no|N|n)echo你选择了否;;*)echo输入无效;;esac服务管理脚本示例#!/bin/bashcase$1instart)systemctl start nginx;;stop)systemctl stop nginx;;restart)systemctl restart nginx;;status)systemctl status nginx;;*)echo用法:$0{start|stop|restart|status}exit1;;esac3. 条件测试3.1 数值比较运算符含义-eq等于-ne不等于-gt大于-lt小于-ge大于等于-le小于等于if[$a-gt$b];thenechoa bfi3.2 字符串比较运算符含义或相等!不相等-z为空-n非空if[$namezzw];thenecho匹配fiif[-z$name];thenechoname 为空fi3.3 文件测试运算符含义-e存在-f是普通文件-d是目录-r可读-w可写-x可执行-s非空-L是符号链接if[-f/etc/passwd];thenecho文件存在fiif[-d/var/log];thenecho目录存在fi3.4 逻辑运算运算[ ][[ ]]与-a或-o||非!!# [ ][-f$file-a-r$file]echo存在且可读# [[ ]][[-f$file-r$file]]echo存在且可读二、循环语句1.for循环语法一列表遍历for变量in列表;do命令done示例foriin12345;doecho$idonefornameinalice bob charlie;doechoHello,$namedone语法二范围foriin{1..10};doecho$idoneforiin{1..10..2};do# 步长 2echo$idone语法三C 风格for((i1;i10;i));doecho$idone语法四遍历文件forfilein*.txt;doecho处理:$filedone语法五遍历命令输出foruserin$(cat/etc/passwd|cut-d:-f1);doecho用户:$userdone实战批量创建用户#!/bin/bashforuserinuser1 user2 user3;doifid$user/dev/null;thenecho$user已存在elseuseradd$userecho123456|passwd--stdin$userecho$user创建成功fidone2.while循环语法while[条件];do命令done条件为真时循环为假时退出。示例#!/bin/bashi1while[$i-le5];doecho$i((i))done读取文件#!/bin/bashwhilereadline;doecho行:$linedonefile.txt无限循环whiletrue;doecho按 CtrlC 退出sleep1done实战监控服务状态#!/bin/bashwhiletrue;doif!systemctl is-active--quietnginx;thenecho$(date): nginx 挂了重启中...systemctl restart nginxfisleep10done3.until循环语法until[条件];do命令done和while相反条件为假时循环为真时退出。示例#!/bin/bashi1until[$i-gt5];doecho$i((i))done等价于i1while[$i-le5];doecho$i((i))done4.break和continuebreak跳出循环foriin{1..10};doif[$i-eq5];thenbreak# 到 5 就退出fiecho$idone# 输出1 2 3 4continue跳过本次foriin{1..5};doif[$i-eq3];thencontinue# 跳过 3fiecho$idone# 输出1 2 4 5break N跳出多层循环foriin{1..3};doforjin{1..3};doif[$j-eq2];thenbreak2# 跳出两层fiecho$i-$jdonedone5.select循环语法select变量in列表;do命令done自动生成菜单用户选择后执行。示例#!/bin/bashPS3请选择操作: selectoptinstart stop restart status quit;docase$optinstart)echo启动服务;;stop)echo停止服务;;restart)echo重启服务;;status)echo查看状态;;quit)break;;*)echo无效选择;;esacdone运行效果1) start 2) stop 3) restart 4) status 5) quit 请选择操作:三、实战综合示例1. 批量 Ping 测试#!/bin/bashforipin10.1.8.{1..254};doping-c1-W1$ip/dev/nullecho$ip在线donewait2. 磁盘监控告警#!/bin/bashTHRESHOLD80df-h|grep-vFilesystem|whilereadline;dousage$(echo$line|awk{print $5}|seds/%//)mount$(echo$line|awk{print $6})if[$usage-gt$THRESHOLD];thenecho警告:$mount使用率$usage%fidone3. 自动备份脚本#!/bin/bashBACKUP_DIR/backupDATE$(date%Y%m%d)SOURCE/var/wwwfordirin$SOURCE/*;doif[-d$dir];thenname$(basename$dir)tar-czvf${BACKUP_DIR}/${name}_${DATE}.tar.gz$dirif[$?-eq0];thenecho备份成功:$nameelseecho备份失败:$namefifidone# 删除 7 天前的备份find$BACKUP_DIR-name*.tar.gz-mtime7-delete4. 服务健康检查#!/bin/bashSERVICESnginx mysql redisforsvcin$SERVICES;doifsystemctl is-active--quiet$svc;thenecho$svc: 运行中elseecho$svc: 已停止尝试启动...systemctl start$svcif[$?-eq0];thenecho$svc: 启动成功elseecho$svc: 启动失败fifidone5. 用户管理菜单#!/bin/bashPS3请选择操作: selectoptin添加用户删除用户查看用户退出;docase$optin添加用户)read-p请输入用户名: usernameifid$username/dev/null;thenecho用户已存在elseuseradd$usernameecho用户创建成功fi;;删除用户)read-p请输入用户名: usernameuserdel-r$username2/dev/nullecho删除成功||echo删除失败;;查看用户)cut-d:-f1/etc/passwd;;退出)break;;esacdone四、常见错误与注意事项错误说明正确写法if[if和[之间没空格if [[ $a $b ]变量没加引号[ $a $b ][ $a x ][ ]中不标准[ $a x ]-o用在[[ ]][[ ]]不支持-o用||两边没空格被当成字符串[[ $a x ]]for i in {1..10}某些 Shell 不支持用$(seq 1 10)while read line不读最后一行文件末尾无换行用while read line || [ -n $line ]五、一句话总结判断if、case循环for、while、until、select控制break、continue结构用途if条件判断case多值匹配for遍历列表while条件循环until反向条件循环select生成菜单break跳出循环continue跳过本次记住if和[之间有空格变量加引号[[ ]]比[ ]更安全。

相关新闻

性能测试从入门到实践:指标、策略与Jmeter压测全解析

性能测试从入门到实践:指标、策略与Jmeter压测全解析

很多团队一提性能测试,第一反应就是“拿Jmeter压一下接口,看看响应时间长不长、有没有报错”。但真正经历过线上事故复盘的人会明白,性能测试从来不是“压一下看稳不稳”这么简单。它背后是一件需要策略、指标体系和边界条件支撑的系统工程。…

2026/10/11 8:02:08 阅读更多 →
高校具身智能实验室建设的核心要点——规避硬件堆砌与设备闲置问题

高校具身智能实验室建设的核心要点——规避硬件堆砌与设备闲置问题

2026 年教育部首次增设具身智能本科方向。高校在筹建具身智能实验室阶段常遭遇多重困境:高价机器人硬件难以支撑全方位实训,师资调配与教师深度参与机制缺位,配套课程体系落地困难。如何规避硬件闲置问题,搭建完善配套体系&#x…

2026/10/11 8:02:08 阅读更多 →
进程知识全景梳理:从定义、调度、IPC到实战排查

进程知识全景梳理:从定义、调度、IPC到实战排查

先说我自己的经历。前几年折腾服务器部署和桌面端应用的时候,我对“进程”这个概念一直处于半懂不懂的状态——知道任务管理器里那一堆条目叫进程,知道 ps aux 能查,但真到了排查问题时就抓瞎:微信为什么开了这么多进程&#xff1…

2026/10/11 8:01:08 阅读更多 →

最新新闻

深度学习OCR系统实战:基于PyTorch的CRNN+CTC文字识别

深度学习OCR系统实战:基于PyTorch的CRNN+CTC文字识别

简介:基于深度学习的文字识别系统完整项目包,面向毕业设计、课程设计与期末大作业场景,适合需要快速搭建OCR系统的计算机相关专业学生。项目采用CNN与RNN结合实现文字检测与识别,覆盖图像预处理、模型训练、后端接口与移动端展示全…

2026/10/11 10:25:10 阅读更多 →
使用 claude-howto 的 blog-draft 技能与草稿模板,系统化产出高质量技术博客

使用 claude-howto 的 blog-draft 技能与草稿模板,系统化产出高质量技术博客

教程文档 【免费下载链接】claude-howto A visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value. 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-howto 点…

2026/10/11 10:25:10 阅读更多 →
Excel自动评分:用LOOKUP和IF函数实现体育成绩折算自动化

Excel自动评分:用LOOKUP和IF函数实现体育成绩折算自动化

简介:这份资源是一份面向体育教师及学校教务人员的Excel实用教程文档,聚焦体育测试成绩换算这一高频痛点,帮助读者用公式与函数替代人工比对,降低错漏率。文档围绕学生成绩空表搭建、跳远与跳绳评分标准表制作、LOOKUP近似匹配与I…

2026/10/11 10:25:10 阅读更多 →
Legendary OSINT 海事篇:AIS 船舶追踪工具全景对比

Legendary OSINT 海事篇:AIS 船舶追踪工具全景对比

Legendary OSINT 海事篇:AIS 船舶追踪工具全景对比 【免费下载链接】Legendary_OSINT A list of OSINT tools & resources for (fraud-)investigators, CTI-analysts, KYC, AML and more. 项目地址: https://gitcode.com/GitHub_Trending/le/Legendary_OSINT…

2026/10/11 10:25:10 阅读更多 →
ProxCenter热迁移深度解析:VDDK+nbdkit实现虚拟机零停机迁移的原理与调优

ProxCenter热迁移深度解析:VDDK+nbdkit实现虚拟机零停机迁移的原理与调优

【免费下载链接】proxcenter-ui ProxCenter is an alternative to VMware vCenter for Proxmox environments. It provides a modern, intuitive web interface to manage multiple Proxmox VE clusters and Proxmox Backup Server instances from a single pane of glass. 项目…

2026/10/11 10:25:10 阅读更多 →
2025年AI IDE实战测评榜:从个人开发到企业部署的完整选型攻略(TaoToken统一API接入篇)

2025年AI IDE实战测评榜:从个人开发到企业部署的完整选型攻略(TaoToken统一API接入篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:24:10 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →