Shell 脚本的核心价值
Shell 脚本的本质是「Linux 命令的批量封装器」,核心价值是把有固定流程、需要重复执行的操作自动化。只要是在 Linux 终端里能敲命令完成的事,几乎都可以写成 Shell 脚本一键执行,既提升效率,又避免手动敲命令的失误。
下面按「从入门到进阶、贴合日常与嵌入式场景」的顺序,梳理最常用的应用场景,每个场景都配简化可运行的示例,方便你理解和上手。
一、入门级:系统日常运维与环境管理
这是新手最先接触、最容易上手的场景,核心是把「每次要敲好几条命令的固定操作」合成一个脚本,一键跑完。
1. 系统一键更新与垃圾清理
场景说明
每次更新系统都要敲 apt update、apt upgrade、apt autoremove、apt clean 好几条命令,写成脚本一条命令就能完成全套更新清理。
示例脚本 sys_update.sh
#!/bin/bash# 一键更新系统并清理冗余包echo "=== 开始更新软件源 ==="sudo apt updateecho "=== 开始升级软件 ==="sudo apt upgrade -yecho "=== 清理无用依赖和缓存 ==="sudo apt autoremove -ysudo apt cleanecho "✅ 系统更新完成!"
为什么用 Shell
都是原生系统命令,直接串起来就行,不用装任何额外工具,零依赖。
2. 批量用户 / 权限管理
场景说明
需要创建十几个测试用户、统一加用户组、设置初始密码,手动一个个敲 useradd 效率极低还容易错,用循环脚本几秒钟搞定。
示例脚本:批量创建 10 个测试用户
#!/bin/bash# 批量创建 user01 ~ user10 共10个用户,初始密码都是 123456for i in $(seq -w 1 10)do username="user${i}" # 创建用户并自动创建家目录 useradd -m -s /bin/bash "$username" # 设置初始密码 echo "123456" | passwd --stdin "$username" echo "已创建用户:(date +%Y%m%d_%H%M%S) # 时间戳命名# 1. 创建备份目录mkdir -p "{backup_dest}/backup_backup_src"# 3. 删除超过保留天数的旧备份find "keep_days -deleteecho "✅ 备份完成:backup_log_dir" -type f -name "*.log" -mtime +30 -deleteecho "✅ 已清理 {board_user}@{app_path}/"echo "=== 重启开发板上的程序 ==="ssh "{board_ip}" "killall myapp; cd app_name" > /dev/null then echo "$(date): 进程 $app_name 不存在,正在重启..." # 启动程序 "(date): 重启完成" fi # 等待10秒再检查 sleep 10done
使用方式
开机后台启动这个脚本,程序崩溃 10 秒内就会被自动拉起来,设备稳定性大幅提升。
3. 设备状态一键巡检
场景说明
定期检查设备的 CPU 负载、内存使用率、磁盘剩余空间、关键进程状态,异常时记录日志或者报警,不用手动一条条命令查。
示例:设备健康检查脚本
#!/bin/bashecho "===== 设备健康巡检 $(date) ====="echo "1. 运行时长:$(uptime | awk '{print $3,$4}')"echo "2. CPU负载:2}')"echo "3. 内存剩余:7}')"echo "4. 根分区剩余:4}')"echo "5. 关键进程:"pgrep -l myapp sshdecho "=================================="
执行后一眼就能看到设备的所有核心状态,排查问题非常方便。
4. 系统开机初始化脚本
场景说明
嵌入式设备开机后,需要自动做很多初始化工作:加载驱动模块、挂载数据分区、设置 IP、启动应用程序,这些都是用 Shell 脚本实现的。
- 现代方式:写在 systemd 的 service 服务里,ExecStart 指向一个 Shell 脚本
四、批量处理:文件与文本自动化
1. 批量文件重命名 / 格式转换
场景说明
几百个文件要统一加前缀、改后缀、替换文件名里的字符,手动改要花几小时,脚本几秒钟搞定。
示例:批量把 .txt 后缀改成 .md
#!/bin/bashfor file in *.txtdo # 替换后缀 new_name="file" "(df / | tail -1 | awk '{print usage" -gt 85 ]then echo "警告:根分区使用率已达 ${usage}%,请及时清理!" # 这里可以加发送邮件/钉钉告警的命令fi
2. 服务健康检查
定期访问网站接口、测试端口连通性,服务异常就自动重启、切换备用节点,实现基础的故障自愈。
六、哪些场景不适合用 Shell 脚本
Shell 脚本擅长「胶水式的命令串联、简单流程控制」,但不是万能的,以下场景更适合用 Python/Go/Java 等高级语言:
- 复杂的业务逻辑:多层嵌套判断、复杂数据结构处理,Shell 写起来维护成本极高。
- 大量数值计算、浮点运算:Shell 默认只支持整数运算,浮点计算非常麻烦。
- 图形界面程序、网络并发服务
- 跨平台需求:Shell 强依赖 Linux 环境,Windows 原生不支持,跨平台脚本优先选 Python。