视频教程 Bash 脚本 实战案例

admin

一、Bash脚本的核心价值

Bash脚本作为Linux系统自动化工具的核心,在运维监控、批量数据处理、定时任务执行等领域具有不可替代性。据统计,专业运维人员70%的工作时间消耗在重复性命令操作上,而合理设计的脚本可提升效率300%以上。本文将通过5个典型场景,手把手教学如何将碎片化命令整合为高效脚本。

二、实战案例精讲

2.1 日志文件自动化清理

场景需求:服务器每日产生10GB日志文件,需自动清理7天前的日志 实现步骤

  1. 创建清理脚本(/home/admin/clean_logs.sh):
    #!/bin/bash
    find /var/log -name "*.log" -mtime +7 -exec xargs rm \;
    find /var/log -name "*.log.*" -mtime +30 -exec xargs rm \;
    echo "Log cleanup completed at $(date)"
  2. 赋予执行权限:
    chmod +x clean_logs.sh
  3. 设置每日凌晨3点自动执行:
    crontab -e
    0 3 * * * /home/admin/clean_logs.sh >> /var/log/clean.log 2>&1

    注意事项

    • 测试环境先运行脚本验证
    • 使用-rm保留文件名后缀防止误删
    • 添加>>重定向日志到监控文件

2.2 自动化文件同步

场景需求:同步开发环境与生产环境的代码文件,保留3天历史版本 脚本实现

#!/bin/bash
# 同步配置文件
rsync -av --delete --exclude={.git,*~} /home/dev/proj/ /home/prod/proj/

# 创建版本归档
mkdir -p /home/prod/archive/{ daily, weekly }
rsync -av --exclude={.git,*~} /home/dev/proj/ /home/prod/archive/daily/$(date +%Y%m%d)
find /home/prod/archive -maxdepth 1 -type d -name "daily*" -mtime +3 -exec rm -rf {} \;

执行策略

  • 每日定时执行rsync同步
  • 每周自动归档历史版本
  • 保留最近3个版本(使用-mtime +3判断)

2.3 定时任务监控系统

架构设计

# /etc/cron.d/monitor
0 * * * * root /opt/scripts/check_disk.sh
0 3 * * * root /opt/scripts/check服务等

核心脚本示例(check_disk.sh)

#!/bin/bash
临界值=80
设备=/dev/sda1
df -h $设备 | awk '$5+0 >= ' critical_value ' {print "警告:" $1 "使用率" $5 "超过阈值" }'

增强功能

  • 添加邮件通知(使用mailutils)
  • 生成可视化报告(调用gnuplot)
  • 设置告警阈值联动(触发重启服务脚本)

2.4 批量文件处理流水线

完整工作流

#!/bin/bash
# 步骤1:正则匹配文件
find /data -type f -name "*.tmp" -o -name "*.log" -exec ls -l {} \; | awk '$5 ~ /^[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{2}:[0-9]{2}$/ {print $1}' | xargs -I{} bash -c 'mv {} / backups/$(date +%Y%m%d).tar.gz'

执行效果

  • 将当天所有2018年及之前的临时日志打包压缩
  • 自动保留最近30天的备份
  • 使用管道实现数据处理流水线

2.5 权限批量修改工具

脚本功能

#!/bin/bash
# 参数1:目录路径;参数2:目标权限(755/644等)
if [ $# -ne 2 ]; then
  echo "Usage: $0 <dir> <perm>"
  exit 1
fi

find $1 -type f -exec chmod $2 {} \;
find $1 -type d -exec chmod $2 -R {} \;

典型应用

./batch_chmod.sh /var/www/html 755
# 效果:将所有PHP文件权限改为755,目录保持755

安全提示

  • 使用sudo前需验证脚本安全性
  • 对敏感目录执行前建议:
    read -s password "Enter root password: " && sudo -S sh script.sh

三、进阶技巧与优化方案

3.1 错误处理机制

#!/bin/bash
function validate_input {
  if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Error: Missing parameters"
    exit 1
  fi
}

validate_input "$1" "$2"
# 后续执行代码...

3.2 性能优化技巧

  1. 分页处理大数据集:
    while read -r line; do
    # 处理逻辑
    done < /path/to/large_file.txt
  2. 使用并行处理:
    for file in /backup/*.tar.gz; do
    parallel --bar -j 4 'tar -xzvf {} | grep "error" > /tmp tar_errors'
    done

3.3 安全实践规范

  • 脚本签名:使用gpg生成密钥对
  • 执行环境限制:
    #!/bin/bash
    export PATH=/bin:/usr/bin
    ulimit -n 1024  # 限制打开文件数
  • 历史操作审计:
    script -f /var/log/script.log /path/to/script.sh

四、实战应用建议

  1. 脚本版本控制

    # 使用修订号管理
    touched() {
    echo $(date +%s) > $1
    }
    touched version.txt
  2. 依赖管理方案

    • 创建独立环境:bash -c "source /etc/environment && /path/to/script.sh"
    • 使用 Docker 容器封装
  3. 监控与告警体系

    
    # 生成Prometheus监控指标
    awk '{print "vector[1] {job=system_monitor, metric=memory_used, value=" $6 "}"}' /proc/meminfo

配置Zabbix模板

zabbix季检-模板-监控项-内存使用率-80%



## 五、总结与提升路径
掌握Bash脚本的核心在于理解流程控制(if/elif/else)、循环结构(for/while)和文件操作(cat/touch/awk)。建议按以下路径提升:
1. 基础阶段:掌握20个高频命令组合(如find + xargs + rm)
2. 进阶阶段:研究正则表达式处理(grep + awk)
3. 高阶阶段:结合Shell与Python编写混合脚本(如Python处理JSON数据)

**必备工具包**:
- 脚本调试工具:bash -x
- 模板引擎:printf配合变量
- 压缩工具:pigz(比gzip快5倍)

建议从每天记录3个常用命令开始,逐步构建自己的脚本知识库。注意定期更新脚本(如添加版本号注释),并建立完整的监控告警链路,这是实现自动化运维的关键。
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码