00:00:00
🐚 Shell脚本集合
💡 Shell脚本是Linux/Unix系统管理员的利器,让繁琐的运维工作自动化
🔧 系统监控脚本
🖥️ 服务器性能监控
实时监控CPU、内存、磁盘使用率,超出阈值自动告警
bash
#!/bin/bash
# 性能监控脚本
CPU_THRESHOLD=80
MEM_THRESHOLD=85
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
mem_usage=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
echo "警告: CPU使用率过高 ($cpu_usage%)"
fi标签: 📅 2024-03-20 | ⭐ 高频使用 | 🔄 自动告警
📊 系统状态检查
全面检查系统状态,包括服务、端口、磁盘空间等
bash
#!/bin/bash
# 系统状态检查脚本
echo "=== 系统状态检查报告 ==="
echo "时间: $(date)"
echo "主机名: $(hostname)"
echo "运行时间: $(uptime)"
echo "磁盘使用情况:"
df -h | grep -E '^/dev/'
echo "内存使用情况:"
free -h标签: 📅 2024-03-15 | ⭐ 常用工具 | 📋 状态报告
🗂️ 文件管理脚本
🗄️ 日志清理
自动清理指定天数前的日志文件,释放磁盘空间
bash
#!/bin/bash
# 日志清理脚本
LOG_DIR="/var/log"
DAYS=30
echo "清理 $DAYS 天前的日志文件..."
find $LOG_DIR -name "*.log" -type f -mtime +$DAYS -exec rm -f {} \;
find $LOG_DIR -name "*.log.*" -type f -mtime +$DAYS -exec rm -f {} \;
echo "日志清理完成"标签: 📅 2024-03-10 | ⭐ 定时任务 | 🧹 空间清理
💾 文件备份
增量备份重要文件到远程服务器,支持压缩和加密
bash
#!/bin/bash
# 文件备份脚本
SOURCE_DIR="/home/data"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
echo "备份完成: backup_$DATE.tar.gz"
# 同步到远程服务器
rsync -avz "$BACKUP_DIR/" user@remote:/backup/标签: 📅 2024-03-05 | ⭐ 数据安全 | 🔄 增量备份
🚀 服务管理脚本
⚙️ 服务监控重启
监控关键服务状态,自动重启异常服务
bash
#!/bin/bash
# 服务监控脚本
SERVICES=("nginx" "mysql" "redis")
for service in "${SERVICES[@]}"; do
if ! systemctl is-active --quiet $service; then
echo "服务 $service 已停止,正在重启..."
systemctl restart $service
sleep 5
if systemctl is-active --quiet $service; then
echo "服务 $service 重启成功"
else
echo "服务 $service 重启失败,请手动检查"
fi
fi
done标签: 📅 2024-03-18 | ⭐ 高可用 | 🔄 自动恢复
🌐 网络工具脚本
🔍 端口扫描
扫描指定主机的开放端口,检查服务可用性
bash
#!/bin/bash
# 端口扫描脚本
HOST=$1
PORTS=(22 80 443 3306 6379)
if [ -z "$HOST" ]; then
echo "用法: $0 <主机地址>"
exit 1
fi
echo "扫描主机: $HOST"
for port in "${PORTS[@]}"; do
if timeout 3 bash -c "echo >/dev/tcp/$HOST/$port" 2>/dev/null; then
echo "端口 $port: 开放"
else
echo "端口 $port: 关闭"
fi
done标签: 📅 2024-03-12 | ⭐ 网络诊断 | 🔍 安全检查
📈 Shell脚本统计
| 指标 | 数值 |
|---|---|
| 脚本总数 | 15+ |
| 分类数量 | 4个 |
| 更新频率 | 周更新 |
| 使用场景 | 运维自动化 |
💡 Shell编程技巧
🔧 变量与参数
- 使用
${var}进行变量引用 - 检查参数数量:
if [ $# -ne 2 ] - 设置默认值:
${var:-default}
🛡️ 错误处理
- 使用
set -e遇错即停 - 检查命令执行结果:
if [ $? -eq 0 ] - 日志记录:
echo "错误信息" >> error.log
⚡ 性能优化
- 避免频繁调用外部命令
- 使用内置命令替代外部工具
- 合理使用管道和重定向
🛠️ 好的Shell脚本不仅能解决问题,更应该具备可读性、可维护性和健壮性
