#!/bin/bash
# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
# 检查是否有超级权限
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}该脚本需要超级权限运行。请使用 sudo 运行脚本。${NC}"
exit 1
fi
# 网络接口列表
interfaces=$(ip link | grep -oE '^[0-9]+:[[:space:]]+([^:]+):' | cut -d':' -f2)
# 存储诊断报告
diagnosis_report=""
for interface in $interfaces; do
echo -e "正在检查网络接口: ${GREEN}$interface${NC}"
# 检查网络连接
if ping -c 1 8.8.8.8 &> /dev/null; then
echo -e "网络连接正常"
diagnosis_report+="网络连接正常\n"
else
echo -e "${RED}网络连接异常${NC}"
diagnosis_report+="网络连接异常\n"
fi
# 检测网络延迟和丢包率
ping_result=$(ping -c 10 8.8.8.8)
packet_loss=$(echo "$ping_result" | grep -oE '[0-9]+% packet loss' | cut -d'%' -f1)
average_time=$(echo "$ping_result" | grep -oE 'rtt min/avg/max/mdev = [0-9.]+/[0-9.]+/[0-9.]+/[0-9.]+ ms' | cut -d'=' -f2 | cut -d'/' -f2)
echo -e "丢包率: ${packet_loss}%"
echo -e "平均延迟: ${average_time} ms"
diagnosis_report+="丢包率: ${packet_loss}%\n平均延迟: ${average_time} ms\n"
# 故障排除
if [ "$packet_loss" -gt 0 ] || [ -z "$average_time" ]; then
echo -e "${RED}检测到网络故障,尝试故障排除${NC}"
diagnosis_report+="检测到网络故障,尝试故障排除\n"
# 重启网络服务
if systemctl restart networking &> /dev/null; then
echo -e "网络服务重启成功"
diagnosis_report+="网络服务重启成功\n"
else
echo -e "${RED}网络服务重启失败${NC}"
diagnosis_report+="网络服务重启失败\n"
fi
# 重新获取IP
if dhclient $interface &> /dev/null; then
echo -e "重新获取IP成功"
diagnosis_report+="重新获取IP成功\n"
else
echo -e "${RED}重新获取IP失败${NC}"
diagnosis_report+="重新获取IP失败\n"
fi
fi
echo -e "\n"
done
# 生成诊断报告文件
echo -e "生成诊断报告: network_diagnosis_report.txt"
echo -e "$diagnosis_report" > network_diagnosis_report.txt