Linux脚本实例:自动化任务与系统管理实践

在Linux系统中,Shell脚本是自动化任务、简化重复操作的核心工具,通过编写脚本,用户可以批量处理文件、监控系统状态、定时执行任务等,显著提升工作效率,本文将通过多个实用实例,展示Linux脚本在不同场景下的应用,涵盖文件处理、系统监控、日志分析及定时任务等方面,帮助读者掌握脚本的编写技巧与最佳实践。
文件批量处理脚本
在日常运维中,经常需要对大量文件进行重命名、格式转换或内容替换,以下是一个批量重命名文件的脚本示例,将当前目录下所有.txt文件名中的空格替换为下划线:
#!/bin/bash
# 批量重命名文件:将空格替换为下划线
for file in *.txt; do
new_name=$(echo "$file" | tr ' ' '_')
mv "$file" "$new_name"
echo "重命名: $file -> $new_name"
done
脚本解析:
for file in *.txt:遍历当前目录下所有.txt文件。tr ' ' '_':通过tr命令将文件名中的空格替换为下划线。mv "$file" "$new_name":执行重命名操作,并输出日志。
扩展应用:若需批量修改文件内容,可结合sed命令实现,将所有.txt文件中的“old_string”替换为“new_string”:
#!/bin/bash
# 批量替换文件内容
for file in *.txt; do
sed -i 's/old_string/new_string/g' "$file"
echo "已处理: $file"
done
系统资源监控脚本
服务器性能监控是运维的重要工作,以下脚本实时监控CPU、内存及磁盘使用率,并在资源占用超过阈值时发送告警:
#!/bin/bash
# 系统资源监控脚本
THRESHOLD_CPU=80
THRESHOLD_MEM=85
THRESHOLD_DISK=90
# 获取CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
echo "CPU使用率: ${cpu_usage}%"
# 获取内存使用率
mem_usage=$(free | grep Mem | awk '{print ($3/$2) * 100.0}')
echo "内存使用率: ${mem_usage}%"
# 获取磁盘使用率
disk_usage=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
echo "磁盘使用率: ${disk_usage}%"
# 告警判断
if (( $(echo "$cpu_usage > $THRESHOLD_CPU" | bc -l) )); then
echo "警告: CPU使用率过高!"
fi
if (( $(echo "$mem_usage > $THRESHOLD_MEM" | bc -l) )); then
echo "警告: 内存使用率过高!"
fi
if [ "$disk_usage" -gt "$THRESHOLD_DISK" ]; then
echo "警告: 磁盘使用率过高!"
fi
脚本解析:

top -bn1:非交互式获取CPU使用率。free命令结合awk计算内存占用百分比。df -h /查看根分区磁盘使用情况。- 通过
bc命令进行浮点数比较,实现阈值告警。
日志分析自动化脚本
日志分析是排查故障的关键,以下脚本统计Nginx访问日志中IP访问次数,并筛选出Top 10高频访问IP:
#!/bin/bash
# Nginx日志分析脚本
LOG_FILE="/var/log/nginx/access.log"
if [ ! -f "$LOG_FILE" ]; then
echo "错误: 日志文件不存在"
exit 1
fi
echo "Top 10高频访问IP:"
awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | head -n 10
脚本解析:
awk '{print $1}':提取日志中的IP地址(第一列)。sort | uniq -c:统计每个IP出现的次数。sort -nr | head -n 10:按次数降序排序并取前10名。
扩展功能:若需分析特定时间段的错误日志,可结合grep和日期过滤:
#!/bin/bash
# 分析Nginx 500错误日志
LOG_FILE="/var/log/nginx/error.log"
DATE=$(date +"%d/%b/%Y")
echo "[$DATE] 500错误日志:"
grep "$DATE" "$LOG_FILE" | grep "500" | awk '{print $6, $9}' | sort | uniq -c
定时任务自动化脚本
通过cron服务,可实现脚本定时执行,每日凌晨3点自动备份指定目录:
#!/bin/bash # 自动备份脚本 SOURCE_DIR="/home/user/data" BACKUP_DIR="/backup" DATE=$(date +%Y%m%d) BACKUP_FILE="data_backup_$DATE.tar.gz" # 创建备份目录 mkdir -p "$BACKUP_DIR" # 执行备份 tar -czf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE_DIR" echo "备份完成: $BACKUP_FILE" # 保留最近7天的备份,删除旧文件 find "$BACKUP_DIR" -name "data_backup_*.tar.gz" -mtime +7 -delete
设置定时任务:
执行crontab -e,添加以下行:
0 3 * * * /path/to/backup_script.sh >> /var/log/backup.log 2>&1
解析:

tar -czf:压缩打包源目录。find -mtime +7:删除7天前的备份文件。>> /var/log/backup.log 2>&1:将标准输出和错误日志重定向到文件。
脚本编写最佳实践
-
参数校验:检查输入参数或文件是否存在,避免脚本执行失败。
if [ $# -ne 1 ]; then echo "用法: $0 <目录名>" exit 1 fi -
日志记录:关键操作添加日志,便于排查问题。
logger -t "my_script" "开始执行任务"
-
权限控制:脚本设置可执行权限(
chmod +x script.sh),避免权限不足导致错误。 -
模块化设计:将复杂功能拆分为函数,提高代码复用性。
backup_data() { # 备份逻辑 } send_alert() { # 告警逻辑 }
Linux脚本的灵活性和强大的自动化能力,使其成为系统管理和运维不可或缺的工具,通过文件处理、系统监控、日志分析及定时任务等实例,读者可以逐步掌握脚本的编写方法,在实际应用中,需结合具体需求设计逻辑,并注重脚本的健壮性和可维护性,从而充分发挥脚本在提升工作效率中的价值。
















