news 2026/4/30 4:35:54

Bash 循环与函数、Linux 进程管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bash 循环与函数、Linux 进程管理

Bash 脚本中的循环函数和 Linux 的进程管理是 shell 编程与系统运维的核心内容。下面用清晰的结构和大量实用例子整理成笔记形式(2026 年视角,基于 bash 5.x+ 常用写法)。

1. Bash 三种循环语句

循环类型关键字适用场景语法特点退出条件
forfor … in已知列表/范围/文件列表最常用、最安全遍历完列表
whilewhile 条件条件为真时继续(次数未知)类似其他语言 while条件为假
untiluntil 条件条件为时继续(直到条件为真)while 的“反向”版本条件为真
1.1 for 循环(最常用)
# 写法1:遍历列表(最常见)forvarinapple banana"cherry pie"orange;doecho"水果:$var"done# 写法2:用通配符遍历文件forfilein*.sh;doecho"脚本文件:$file"chmod+x"$file"# 注意加引号防空格文件名done# 写法3:C 风格(数字范围最常用)for((i=1;i<=10;i+=2));doecho"奇数:$i"done# 写法4:结合 seq 或 brace expansion(推荐)foriin{1..5};doecho$i;done# 1 2 3 4 5foriin$(seq10220);doecho$i;done# 10 12 14 ... 20
1.2 while 循环
# 经典:读取文件逐行(最安全写法)whileIFS=read-r line;doecho"行内容:$line"done<data.txt# 条件循环count=1while[$count-le5];doecho"计数:$count"((count++))done# 死循环 + break 退出(超级常用)whiletrue;doread-p"输入 q 退出:"input[[$input=="q"]]&&breakecho"你输入了:$input"done
1.3 until 循环(较少用,但某些场景很优雅)
# 等待某个文件出现until[-f /tmp/ready.flag];doecho"等待就绪文件出现..."sleep2doneecho"文件已就绪,开始处理!"# 计数到 10i=1until((i>10));doecho$i((i++))done

循环控制:break / continue

  • break:跳出整个循环
  • continue:跳过本次,进入下一次迭代
  • break 2/continue 2:跳出/跳过外层第 2 层循环(嵌套时有用)
foriin{1..5};doforjin{a..c};do[[$j=="b"]]&&continue2# 跳过外层本次echo"$i-$j"donedone

2. Bash 函数

Bash 函数是脚本模块化的核心。现代写法强烈推荐使用local变量 +return状态码 +echo返回数据。

基本语法
# 定义方式1(推荐)greet(){localname="$1"# 局部变量,防止污染全局echo"你好,$name!"return0# 成功返回 0(约定俗成)}# 定义方式2(旧式,也合法)functiongreet2{echo"Hi,$1"}# 调用greet"重阳"greet2"Warsaw"# 带返回值(状态码 + 数据)add(){localsum=$(($1+$2))echo"$sum"# 通过 stdout 返回数据(最常用)return0# 状态码}result=$(add3864)# 捕获 echo 输出echo"结果:$result"# 102echo"状态码:$?"# 0
常见陷阱与最佳实践
  • 不要直接用全局变量传结果 → 容易冲突
  • 推荐echo返回主要数据,return只返回 0~255 状态码
  • 参数:$1 $2 ... $@ $* $#
  • $@(推荐) vs$*:带引号时行为不同(处理空格参数)
show_args(){echo"参数个数:$#"echo"所有参数(@):$@"forargin"$@";doecho"→$arg";done}show_args"hello world"bash"Warsaw PL"

3. Linux 进程管理常用命令(2025-2026 实用组合)

目的常用命令组合说明与示例
查看所有进程ps aux/ps -efps aux | grep nginx
实时监控(交互)top/htop(需安装) /btop(现代替代)htop 里按 F9 kill 进程
树形查看进程关系pstree -p显示 PID 和父子关系
查找进程 PIDpgrep nginx/pidof nginxpgrep -l python带进程名
温和终止kill PID/kill -15 PIDSIGTERM,让进程自己清理
强制杀死kill -9 PID/pkill -9 -f "python app"SIGKILL,无法捕获,危险但有效
按名字杀pkill nginx/killall -9 ffmpegpkill 支持模式,killall 精确进程名
后台运行command &/nohup command &nohup 防终端关闭挂起
管理后台任务jobs/fg %1/bg %2/Ctrl+ZCtrl+Z 暂停 → bg 后台继续 → fg 拉回前台
脱离终端长期运行nohup python script.py > out.log 2>&1 &或使用screen/tmux/systemd服务
经典组合示例
  1. 查找并杀掉卡死的进程

    psaux|grep-i chrome|grep-vgreppkill-9 -f"chrome --type=renderer"
  2. 后台启动服务并记录日志

    nohup./my_server --port8080>server.log2>&1&tail-f server.log
  3. 暂停/恢复/杀后台任务

    sleep3600&# 后台睡1小时jobs# 显示 [1] Running ...fg%1# 拉回前台(可 Ctrl+C 杀)# 或kill%1# 直接杀后台任务

小练习建议

  1. 写一个函数backup_files,接收目录路径,备份所有 .txt 文件到 backup_日期/ 下
  2. 用 until 循环等待某个端口(例如 3306)被占用(netstat/ss/netcat 测试)
  3. 写脚本:循环监控某个进程(nginx),如果不存在则启动它(while + pgrep)

有哪部分想看更详细的完整脚本示例?
或者想深入某个工具(如 tmux/screen 的多会话管理、systemd 服务编写)?随时说~

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

学霸同款! 降AIGC软件 千笔·专业降AIGC智能体 VS 知文AI,MBA专属首选

在AI技术迅猛发展的今天&#xff0c;越来越多的学生、研究人员和职场人士开始借助AI工具辅助完成论文、报告和学术材料。然而&#xff0c;随着AI生成内容的广泛应用&#xff0c;如何有效降低AIGC率和重复率成为了一个亟需解决的难题。尤其是在学术审查日益严格的背景下&#xf…

作者头像 李华
网站建设 2026/4/18 21:29:05

基于Java:同城理发预约高效服务系统

Java赋能同城理发预约&#xff1a;开启高效服务新时代在快节奏的都市生活中&#xff0c;传统理发店的预约方式逐渐暴露出诸多弊端。电话预约效率低下&#xff0c;常常遭遇占线或沟通失误&#xff1b;到店排队不仅浪费时间&#xff0c;还可能因技师繁忙而等待许久。消费者对便捷…

作者头像 李华
网站建设 2026/4/18 21:27:19

RetinaFace开源模型实战:基于ModelScope预训练权重的轻量级部署教程

RetinaFace开源模型实战&#xff1a;基于ModelScope预训练权重的轻量级部署教程 1. 快速上手&#xff1a;10分钟完成人脸检测 想快速体验专业级的人脸检测效果吗&#xff1f;RetinaFace是一个强大的人脸检测模型&#xff0c;不仅能准确识别人脸位置&#xff0c;还能精确定位5…

作者头像 李华
网站建设 2026/4/18 21:27:21

基于Thinkphp和Laravel的幼儿园学生管理系统vue

目录技术栈概述系统功能模块设计前后端分离架构关键技术实现性能与安全优化部署与运维扩展方向项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理技术栈概述 后端框架&#xff1a;ThinkPHP&#xff08;适合快速开发、国内生态完善&#xff09;与Lar…

作者头像 李华