MST
星途 面试题库

面试题:Bash 脚本优化网络诊断及故障排除自动化

编写一个高级 Bash 脚本,用于全面诊断网络问题。该脚本不仅要检查网络连接是否正常,还要检测网络延迟、丢包率,并能自动尝试常见的故障排除方法(如重启网络服务、重新获取 IP 等)。脚本需要能够处理多种网络接口情况,并且要尽可能优化性能,在检测到故障时生成详细的诊断报告。
19.9万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/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