核心思路: 把Shell脚本比作“药方”,专门治疗运维工作中的那些重复、繁琐的“慢性病”。每个案例都是一个完整的、可复用的脚本。
内容要点与实操步骤:
案例一:日志清理脚本(“磁盘空间肥胖症”)
1.病症: /app/logs 目录动不动就100%,需要自动清理7天前的日志。
2.药方:
1#!/bin/bash 2# 日志清理专家 - 专治磁盘空间肥胖症 3 4LOG_DIR="/app/logs" 5FIND_RESULT=$(find $LOG_DIR -name "*.log" -type f -mtime +7) 6 7# 关键细节1:先判断是否找到文件 8if [ -z "$FIND_RESULT" ]; then 9 echo "$(date): No log files to clean. Healthy!" 10 exit 0 11fi 12 13# 关键细节2:安全起见,先打印预览,而不是直接删除 14echo "The following files will be deleted:" 15echo "$FIND_RESULT" 16 17# 关键细节3:手动确认或放入crontab时强制删除 18read -p "Are you sure to delete these? (y/n): " confirm 19if [ "$confirm" == "y" ]; then 20 echo "$FIND_RESULT" | xargs rm -f 21 echo "$(date): Log cleanup completed." >> /var/log/cleanup.log 22fi
- 真实感: “一定要加 -type f,防止误删目录;用 xargs 比 -exec 效率更高;记录清理日志到 /var/log/cleanup.log 以备审计。”
案例二:目录备份脚本(“数据安全焦虑症”)
1.病症: 关键配置目录 /app/conf 需要每天凌晨1点自动备份。
2.药方:
1#!/bin/bash 2# 目录备份卫士 - 专治数据安全焦虑症 3 4SOURCE_DIR="/app/conf" 5BACKUP_BASE="/backups" 6TODAY=$(date +%Y%m%d) 7BACKUP_DIR="$BACKUP_BASE/conf_backup_$TODAY" 8 9# 关键细节1:判断源目录是否存在 10if [ ! -d "$SOURCE_DIR" ]; then 11 echo "Error: Source dir $SOURCE_DIR not exist!" | mail -s "Backup Failed" [email protected] 12 exit 1 13fi 14 15# 关键细节2:使用rsync进行增量备份,节省空间和时间 16if rsync -av --delete $SOURCE_DIR/ $BACKUP_DIR/; then 17 echo "Backup for $TODAY successful." > $BACKUP_DIR/backup.log 18 # 关键细节3:成功失败都发邮件通知 19 echo "Backup Success: $BACKUP_DIR" | mail -s "Backup Report" [email protected] 20else 21 echo "Backup Failed! Please check." | mail -s "Backup Failed" [email protected] 22 exit 1 23fi
- 真实感: “rsync 的 --delete 参数会删除目标端有而源端没有的文件,保持备份一致性,但使用时要万分小心!用 mail 命令发送通知是成本最低的报警方式。”

