Linux系统基础14:Shell 脚本的核心价值

发布时间:2026/7/16 4:15:32
Linux系统基础14:Shell 脚本的核心价值 Shell 脚本的核心价值Shell 脚本的本质是「Linux 命令的批量封装器」核心价值是把有固定流程、需要重复执行的操作自动化。只要是在 Linux 终端里能敲命令完成的事几乎都可以写成 Shell 脚本一键执行既提升效率又避免手动敲命令的失误。下面按「从入门到进阶、贴合日常与嵌入式场景」的顺序梳理最常用的应用场景每个场景都配简化可运行的示例方便你理解和上手。一、入门级系统日常运维与环境管理这是新手最先接触、最容易上手的场景核心是把「每次要敲好几条命令的固定操作」合成一个脚本一键跑完。1. 系统一键更新与垃圾清理场景说明每次更新系统都要敲apt update、apt upgrade、apt autoremove、apt clean好几条命令写成脚本一条命令就能完成全套更新清理。示例脚本sys_update.sh#!/bin/bash # 一键更新系统并清理冗余包 echo 开始更新软件源 sudo apt update echo 开始升级软件 sudo apt upgrade -y echo 清理无用依赖和缓存 sudo apt autoremove -y sudo apt clean echo ✅ 系统更新完成为什么用 Shell都是原生系统命令直接串起来就行不用装任何额外工具零依赖。2. 批量用户 / 权限管理场景说明需要创建十几个测试用户、统一加用户组、设置初始密码手动一个个敲useradd效率极低还容易错用循环脚本几秒钟搞定。示例脚本批量创建 10 个测试用户#!/bin/bash # 批量创建 user01 ~ user10 共10个用户初始密码都是 123456 for i in $(seq -w 1 10) do usernameuser${i} # 创建用户并自动创建家目录 useradd -m -s /bin/bash $username # 设置初始密码 echo 123456 | passwd --stdin $username echo 已创建用户$username done echo ✅ 全部用户创建完成扩展场景批量修改目录权限、批量给用户加 sudo 权限、批量删除过期用户都可以用类似脚本实现。3. 新机器环境一键初始化场景说明新装完系统的服务器 / 开发板每次都要手动换软件源、装常用工具vim、net-tools、tree、改配置、建目录写成脚本跑一遍就能把环境配好换机器直接复用。典型初始化脚本内容替换国内软件源安装常用开发工具创建工作目录配置 SSH 免密、防火墙规则二、高频实用备份、归档与日志管理这是 Shell 脚本最经典、企业里用得最多的场景几乎所有 Linux 服务器都有定时备份脚本。1. 定时文件 / 目录备份场景说明定期备份重要数据网站代码、项目文档、配置文件自动按时间命名、压缩、保留最近 N 天的备份防止数据丢失。一般配合crontab每天凌晨自动执行。示例脚本dir_backup.sh#!/bin/bash # 功能备份指定目录自动删除7天前的旧备份 # 配置变量 backup_src/data/project # 要备份的源目录 backup_dest/data/backup # 备份存放位置 keep_days7 # 保留几天的备份 time_tag$(date %Y%m%d_%H%M%S) # 时间戳命名 # 1. 创建备份目录 mkdir -p $backup_dest # 2. 打包压缩 tar -zcf ${backup_dest}/backup_${time_tag}.tar.gz $backup_src # 3. 删除超过保留天数的旧备份 find $backup_dest -name backup_*.tar.gz -mtime $keep_days -delete echo ✅ 备份完成backup_${time_tag}.tar.gz配套定时执行每天凌晨 2 点自动备份在 crontab 里加一行0 2 * * * /root/dir_backup.sh /var/log/backup.log 212. 日志自动清理与轮转场景说明系统日志、应用运行日志会越积越多把磁盘占满。用脚本定期删除过期日志、按天切割日志保证磁盘空间充足。示例清理 30 天前的日志文件#!/bin/bash # 清理 /var/log/app 下超过30天的 .log 文件 log_dir/var/log/app find $log_dir -type f -name *.log -mtime 30 -delete echo ✅ 已清理 $log_dir 下30天前的日志嵌入式场景扩展嵌入式设备存储空间小eMMC 容量有限日志清理脚本是标配防止日志写满存储导致系统崩溃。三、贴合你的场景嵌入式开发与设备维护针对你在用的 OK62xx 嵌入式 Linux 开发板Shell 脚本是开发和运维的必备工具几个最常用的场景1. 程序一键编译 上传到开发板场景说明每次改完代码都要交叉编译、scp 传文件到开发板、杀旧进程、重启程序一套操作四五条命令写成脚本一键跑完开发效率提升非常明显。示例脚本deploy.sh#!/bin/bash # 交叉编译程序 - 上传到开发板 - 重启程序 # 开发板配置 board_ip192.168.1.100 board_userroot app_path/opt/myapp echo 开始交叉编译 arm-linux-gnueabihf-gcc main.c -o myapp echo 上传程序到开发板 scp myapp ${board_user}${board_ip}:${app_path}/ echo 重启开发板上的程序 ssh ${board_user}${board_ip} killall myapp; cd ${app_path}; chmod x myapp; ./myapp echo ✅ 程序部署完成改完代码执行./deploy.sh全程不用手动输命令非常省心。2. 服务守护进程挂了自动重启场景说明嵌入式设备要长期无人值守运行万一应用程序崩溃退出要能自动拉起来保证业务不中断。这就是最基础的「看门狗」脚本。示例脚本app_guard.sh#!/bin/bash # 监控 myapp 进程不存在就自动重启 app_namemyapp app_path/opt/myapp/myapp # 无限循环每10秒检查一次 while true do # 检查进程是否存在 if ! pgrep $app_name /dev/null then echo $(date): 进程 $app_name 不存在正在重启... # 启动程序 $app_path echo $(date): 重启完成 fi # 等待10秒再检查 sleep 10 done使用方式开机后台启动这个脚本程序崩溃 10 秒内就会被自动拉起来设备稳定性大幅提升。3. 设备状态一键巡检场景说明定期检查设备的 CPU 负载、内存使用率、磁盘剩余空间、关键进程状态异常时记录日志或者报警不用手动一条条命令查。示例设备健康检查脚本#!/bin/bash echo 设备健康巡检 $(date) echo 1. 运行时长$(uptime | awk {print $3,$4}) echo 2. CPU负载$(uptime | awk -F load average: {print $2}) echo 3. 内存剩余$(free -h | grep Mem | awk {print $7}) echo 4. 根分区剩余$(df -h / | tail -1 | awk {print $4}) echo 5. 关键进程 pgrep -l myapp sshd echo 执行后一眼就能看到设备的所有核心状态排查问题非常方便。4. 系统开机初始化脚本场景说明嵌入式设备开机后需要自动做很多初始化工作加载驱动模块、挂载数据分区、设置 IP、启动应用程序这些都是用 Shell 脚本实现的。传统方式写在/etc/rc.local里现代方式写在 systemd 的 service 服务里ExecStart 指向一个 Shell 脚本四、批量处理文件与文本自动化1. 批量文件重命名 / 格式转换场景说明几百个文件要统一加前缀、改后缀、替换文件名里的字符手动改要花几小时脚本几秒钟搞定。示例批量把 .txt 后缀改成 .md#!/bin/bash for file in *.txt do # 替换后缀 new_name${file%.txt}.md mv $file $new_name done echo ✅ 批量重命名完成2. 批量修改配置文件 / 提取日志信息配合sed、awk、grep三大文本工具Shell 脚本可以批量处理文本内容批量替换所有配置文件里的旧 IP 为新 IP从海量日志里提取错误请求、统计访问量 Top10 的 IP批量给配置文件加注释、改参数示例批量替换目录下所有配置文件的 IP#!/bin/bash # 把 /etc/config 下所有 .conf 文件里的 192.168.1.100 换成 192.168.1.200 sed -i s/192.168.1.100/192.168.1.200/g /etc/config/*.conf一条命令就能完成几十上百个文件的修改手动改不仅慢还容易漏。五、进阶级监控告警与故障自愈1. 资源阈值告警监控磁盘、内存、CPU 使用率超过阈值就发告警消息邮件、钉钉、企业微信提前发现问题避免系统宕机。示例磁盘使用率超 85% 告警#!/bin/bash # 检查根分区使用率 usage$(df / | tail -1 | awk {print $5} | sed s/%//) if [ $usage -gt 85 ] then echo 警告根分区使用率已达 ${usage}%请及时清理 # 这里可以加发送邮件/钉钉告警的命令 fi2. 服务健康检查定期访问网站接口、测试端口连通性服务异常就自动重启、切换备用节点实现基础的故障自愈。六、哪些场景不适合用 Shell 脚本Shell 脚本擅长「胶水式的命令串联、简单流程控制」但不是万能的以下场景更适合用 Python/Go/Java 等高级语言复杂的业务逻辑多层嵌套判断、复杂数据结构处理Shell 写起来维护成本极高。大量数值计算、浮点运算Shell 默认只支持整数运算浮点计算非常麻烦。图形界面程序、网络并发服务Shell 不适合做高并发、长连接的服务程序。跨平台需求Shell 强依赖 Linux 环境Windows 原生不支持跨平台脚本优先选 Python。