Linux脚本编程Bash实例:三个能直接用的实用脚本详解
引言
很多朋友刚接触 Linux 服务器时,都会觉得脚本编程很神秘。
其实 Bash 脚本 就是把你在终端敲的命令按顺序存进一个文件,让它自动执行。
今天我就用三个真实的 Linux脚本编程Bash实例,带你从零写出能解决实际问题的脚本。
事前准备
- Linux 服务器(CentOS 7+、Ubuntu 18.04+ 均可)
- SSH 登录工具(如终端、PuTTY)
- 普通用户或 root(建议先用普通用户练习)
- 编辑工具:系统自带的
vim或nano
确认你的环境支持 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 定时任务使用,就能实现真正的自动化运维。