Linux脚本编程Bash实例:三个能直接用的实用脚本详解

引言


很多朋友刚接触 Linux 服务器时,都会觉得脚本编程很神秘。

其实 Bash 脚本 就是把你在终端敲的命令按顺序存进一个文件,让它自动执行。

今天我就用三个真实的 Linux脚本编程Bash实例,带你从零写出能解决实际问题的脚本。


事前准备



  • Linux 服务器(CentOS 7+、Ubuntu 18.04+ 均可)

  • SSH 登录工具(如终端、PuTTY)

  • 普通用户或 root(建议先用普通用户练习)

  • 编辑工具:系统自带的 vimnano


确认你的环境支持 Bash:


which bash

输出类似 /bin/bash 即可

实例一:自动备份目录脚本


场景:每天把 /var/www/html 压缩备份到 /backup,并按日期命名。


脚本内容


创建文件 /home/youruser/backup.sh


#!/bin/bash

备份源目录

src="/var/www/html"

备份目标位置

dest="/backup"

生成文件名:backup_2025-04-10.tar.gz

filename="backup_$(date +%Y-%m-%d).tar.gz"

创建目标目录(如果不存在)

mkdir -p "$dest"

执行打包

tar -czf "$dest/$filename" "$src"

输出结果

echo "备份完成:$dest/$filename"


关键解释



  • #!/bin/bash 声明解释器,必须放在第一行。

  • $(date ...) 执行命令并取结果,用来生成动态文件名。

  • mkdir -p 避免因目录不存在而报错。

  • tar -czf 创建 gzip 压缩包。


运行与验证


chmod +x /home/youruser/backup.sh
./backup.sh
ls -lh /backup/backup_*.tar.gz

成功的话会看到刚生成的压缩包。


实例二:系统健康检查脚本


场景:一键检查磁盘使用率、内存状态、CPU 负载,超过阈值则输出警告。


脚本内容


创建 check_health.sh


#!/bin/bash

磁盘使用率阈值(百分比)

disk_threshold=80

内存使用率阈值

mem_threshold=90

echo "===== 系统健康检查 ====="

检查磁盘使用率

disk_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "根分区使用率:${disk_usage}%"
if [ "$disk_usage" -gt "$disk_threshold" ]; then
echo "⚠️ 磁盘使用率超过 ${disk_threshold}%,请清理!"
fi

检查内存使用率

mem_usage=$(free | awk '/Mem:/ {printf "%.0f", $3/$2 * 100}')
echo "内存使用率:${mem_usage}%"
if [ "$mem_usage" -gt "$mem_threshold" ]; then
echo "⚠️ 内存使用率超过 ${mem_threshold}%,请扩容或优化!"
fi

检查 CPU 负载(1 分钟平均)

cpu_load=$(uptime | awk '{print $NF}')
echo "CPU 1 分钟负载:$cpu_load"

echo "===== 检查结束 ====="


避坑说明



  • df / 的列位置可能因系统不同而变化,建议先用 df / 确认表头。

  • free 输出在旧版可能不含 Mem: 行,改用 free -m 再取数字更稳定。

  • 数字比较用 -gt 而不是 >


效果验证


chmod +x check_health.sh
./check_health.sh

如果当前使用率超限,会看到警告文字。


实例三:自动清理过期日志脚本


场景:删除 /var/log/ 下 7 天前的 .log 文件,并记录清理日志。


脚本内容


创建 clean_logs.sh


#!/bin/bash

log_dir="/var/log"
days=7
clean_log="/var/log/clean_record.log"

查找并删除过期日志

echo "$(date):开始清理 $log_dir 中 $days 天前的 .log 文件" >> "$clean_log"
find "$log_dir" -name "*.log" -type f -mtime +$days -exec rm -f {} \;

if [ $? -eq 0 ]; then
echo "$(date):清理完成" >> "$clean_log"
else
echo "$(date):清理过程中出现错误" >> "$clean_log"
fi


高频问题


Q:-mtime +7 是什么意思?

A:查找最后修改时间在 7 天之前的文件(以 24 小时为单位)。


Q:为什么用 -exec rm -f {} \; 而不是管道到 xargs

A:对新手来说 -exec 更直观安全;文件名包含空格时 xargs 需额外处理。


效果验证


先手动创建一个旧文件测试:


touch -t 202403010000 /tmp/test_old.log
./clean_logs.sh
cat /var/log/clean_record.log

查看记录文件确认执行时间和结果。


总结


以上三个 Linux脚本编程Bash实例 覆盖了最常见的运维场景:备份、监控、清理。

建议你逐步对照编写、运行,并尝试修改参数(如备份目录、阈值天数)。

遇到报错时先检查文件权限路径是否正确,这是新手最容易忽略的地方。

把这些脚本配合 crontab 定时任务使用,就能实现真正的自动化运维。

分享到:
上一篇
WordPress集成AI写作:WordPress网站集成A
下一篇
Docker部署Nginx反向代理:零基础手把手操作指南
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意