服务器测评网
我们一直在努力

linux脚本实例

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

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

脚本解析

linux脚本实例

  • 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

解析

linux脚本实例

  • tar -czf:压缩打包源目录。
  • find -mtime +7:删除7天前的备份文件。
  • >> /var/log/backup.log 2>&1:将标准输出和错误日志重定向到文件。

脚本编写最佳实践

  1. 参数校验:检查输入参数或文件是否存在,避免脚本执行失败。

    if [ $# -ne 1 ]; then
        echo "用法: $0 <目录名>"
        exit 1
    fi
  2. 日志记录:关键操作添加日志,便于排查问题。

    logger -t "my_script" "开始执行任务"
  3. 权限控制:脚本设置可执行权限(chmod +x script.sh),避免权限不足导致错误。

  4. 模块化设计:将复杂功能拆分为函数,提高代码复用性。

    backup_data() {
        # 备份逻辑
    }
    send_alert() {
        # 告警逻辑
    }

Linux脚本的灵活性和强大的自动化能力,使其成为系统管理和运维不可或缺的工具,通过文件处理、系统监控、日志分析及定时任务等实例,读者可以逐步掌握脚本的编写方法,在实际应用中,需结合具体需求设计逻辑,并注重脚本的健壮性和可维护性,从而充分发挥脚本在提升工作效率中的价值。

赞(0)
未经允许不得转载:好主机测评网 » linux脚本实例