在日常运维工作中,Shell脚本一直是提升效率的核心利器。无论是服务器巡检、日志清理、文件备份,还是进程监控与批量操作,一套完善的Shell脚本即可将重复性人工操作转化为一键自动化执行。本文整理了10个高频运维场景下的Shell脚本案例,全部基于bash实现,兼容CentOS、Ubuntu等主流Linux发行版,无需第三方依赖,即拿即用。

一、概述与适用场景
Shell脚本是Linux运维的核心工具,基于bash可实现服务器资源巡检、日志自动清理、数据备份、进程监控、批量操作等自动化任务。这10个经典案例覆盖了日常运维中最高频的应用场景,代码开箱即用,兼顾可读性与稳定性,适合直接部署。
二、运行环境与前提条件
- 系统Shell:需要bash 4.0及以上版本
- 权限要求:部分脚本执行需root权限
- 基础工具依赖:awk、sed、grep、crontab(主流系统默认已安装)
三、十大经典Shell自动化运维脚本实战演示
案例1:服务器硬件资源一键巡检脚本
#!/bin/bash
echo "====服务器资源巡检报告===="
echo "主机名:$(hostname)"
echo "系统版本:$(cat /etc/redhat-release 2>/dev/null || lsb_release -a)"
echo "CPU负载:$(uptime | awk -F'load a verage:' '{print $2}')"
echo "内存使用:$(free -h)"
echo "磁盘挂载:$(df -h)"
echo "运行时长:$(uptime -p)"
案例2:定时清理过期日志文件脚本
#!/bin/bash
LOG_PATH="/var/log/nginx"
# 删除7天前日志
find $LOG_PATH -name "*.log" -mtime +7 -delete
echo "已清理7天以上日志文件"
案例3:数据库全量备份脚本
#!/bin/bash
BACKUP_DIR="/data/mysql_backup"
DB_NAME="test_db"
TIME=$(date +%Y%m%d)
mysqldump -uroot -p123456 $DB_NAME > $BACKUP_DIR/${DB_NAME}_$TIME.sql
案例4:进程异常自动重启监控脚本
#!/bin/bash
PROCESS="nginx"
if ! pgrep $PROCESS > /dev/null; then
systemctl start $PROCESS
echo "$PROCESS进程已异常重启"
fi
案例5:批量ping检测主机存活脚本
#!/bin/bash
for ip in 192.168.1.{1..20}; do
ping -c1 -W1 $ip > /dev/null
[ $? -eq 0 ] && echo "$ip 在线"
done
案例6:批量修改文件后缀脚本
#!/bin/bash
for file in *.txt; do
mv "$file" "${file%.txt}.md"
done
案例7:日志访问IP次数统计脚本
#!/bin/bash
awk '{print $1}' access.log | sort | uniq -c | sort -nr
案例8:自动压缩打包归档目录脚本
#!/bin/bash
TIME=$(date +%Y%m%d)
tar -zcvf data_$TIME.tar.gz /home/data
案例9:磁盘使用率告警监控脚本
#!/bin/bash
WARN_THRESHOLD=85
df -h | grep -v tmpfs | awk 'NR>1{gsub(/%/,"",$5);if($5>'"$WARN_THRESHOLD"')print $1,$5"%磁盘占用过高"}'
案例10:批量远程执行命令脚本
#!/bin/bash
HOSTS=("192.168.1.10" "192.168.1.11")
for host in ${HOSTS[@]}; do
ssh root@$host "hostname;free -h"
done
四、通用使用规范与最佳实践
- 赋予脚本执行权限:
chmod +x demo.sh - 配置定时任务:
crontab -e添加定时规则 - 生产环境建议添加日志输出与错误捕获:
set -euo pipefail - 敏感信息如密码、数据库账号不要明文写入,推荐使用环境变量传入
五、适用场景与集成建议
- 服务器日常巡检与磁盘空间预警
- 网站日志自动清理与数据定时备份
- 业务进程保活与故障自动恢复
- 内网批量主机运维与日志流量统计分析
所有脚本均轻量化设计,无需额外依赖组件,中小型运维团队可直接部署使用,有效减少重复性人工操作,提升运维效率。
