目录
一、要求
二、脚本介绍
1、脚本内容
2、脚本解释
(1) 检查是否以 root 用户身份运行
(2)显示脚本标题
(3)打印主机名
(4)获取网络接口信息
(5)检查每个接口的状态
(6)检查默认网关
(7)检查DNS服务器
(8)进行 ping 测试
(a)输出标题说明接下来要进行网络连通性测试。
(b)进行 ping 测试
(c)对其他主机测试方法
3、脚本应用和运行
(1)脚本文件
(2)赋予权限
(3)执行结果
4、注意事项
一、要求
由于工作需要,要编写一个用于检查Linux网络配置的自动检测脚本,可以涵盖多个方面,如网络接口状态、IP地址、子网掩码、默认网关、DNS服务器等,以及到公网的连通性的测试。
二、脚本介绍
经过在centos系统中测试,完成了脚本,这个脚本可能需要根据具体系统配置(如使用的发行版)进行调整。
闲话不说,直接介绍脚本吧。
1、脚本内容
(PS:请注意,这个脚本可能需要根据具体需求和环境进行调整。)
#!/bin/bash
# 检查是否以 root 用户身份运行
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root."
exit 1
fi
# 显示脚本标题
echo ""
echo " ====================="
echo " Linux 网络配置检查脚本"
echo " ====================="
echo ""
# 打印主机名
echo "Hostname: $(hostname)"
echo ""
echo " ======== 获取并打印 IP所有网络接口 IP地址、子网掩码、状态和默认网关============="
# 获取网络接口信息
echo "正在检查网络接口状态..."
interfaces=$(ip link show | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')
# 检查每个接口的状态
for interface in $interfaces; do
echo "网络接口: $interface"
ip link show $interface | grep 'state UP' > /dev/null
if [ $? -eq 0 ]; then
echo "状态: 已激活"
# 获取IP地址
ip addr show $interface | grep 'inet ' | awk '{print "IP地址&掩码: "$2}'
# 获取MAC地址
mac=$(ip link show $interface | awk '/link\/ether/ {print $2}')
echo "MAC地址: $mac"
else
echo "状态: 未激活"
fi
echo "---------------------------------"
done
# 检查默认网关
echo "正在检查默认网关..."
default_gateway=$(ip route | grep default | awk '{print$3}')
if [ -z "$default_gateway" ]; then
echo "未找到默认网关。"
else
echo "默认网关: $default_gateway"
fi
# 检查DNS服务器
echo "正在检查DNS服务器配置..."
dns_servers=$(cat /etc/resolv.conf | grep nameserver | awk '{print$2}')
if [ -z "$dns_servers" ]; then
echo "未配置DNS服务器。"
else
echo "DNS服务器:"
for server in $dns_servers; do
echo "- $server"
done
fi
echo ""
echo " ======= ping 测试 =========="
# 进行 ping 测试
echo "Testing connectivity to vidisit.cn (3 packets)..."
ping -c 3 vidisit.cn
# 如果想对特定的主机进行测试,可以添加一个参数
if [ $# -eq 1 ]; then
echo "Testing connectivity to $1 (3 packets)..."
ping -c 3 $1
fi
2、脚本解释
脚本中主要部分的解释如下:
(1) 检查是否以 root 用户身份运行
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root."
exit 1
fi
这段代码检查当前用户是否具有 root 权限。id -u 命令返回当前用户的用户ID,如果用户ID不是0(即不是root用户),则打印一条消息并退出脚本。
(2)显示脚本标题
echo ""
echo " ====================="
echo " Linux 网络配置检查脚本"
echo " ====================="
echo ""
这些 echo 命令用于在控制台输出脚本标题。
(3)打印主机名
echo "Hostname: $(hostname)"
输出当前系统的主机名,$(hostname) 是一个命令替换,它执行 hostname 命令并将输出结果替换到当前位置。
(4)获取网络接口信息
echo "正在检查网络接口状态..."
interfaces=$(ip link show | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}')
输出一条消息,然后使用 ip link show 命令获取网络接口信息,通过 awk 过滤掉本地回环接口(通常是 lo)、虚拟接口(通常是 virbr*)、无线接口(通常是 wl*)以及不以数字开头的行,最后打印出接口名称。
(5)检查每个接口的状态
for interface in $interfaces; do
echo "网络接口: $interface"
ip link show $interface | grep 'state UP' > /dev/null
if [ $? -eq 0 ]; then
echo "状态: 已激活"
获取IP地址
ip addr show $interface | grep 'inet ' | awk '{print "IP地址&掩码: "$2}'
获取MAC地址
mac=$(ip link show $interface | awk '/link\/ether/ {print $2}')
echo "MAC地址: $mac"
else
echo "状态: 未激活"
fi
echo "---------------------------------"
done
这段代码遍历所有网络接口,并检查它们的状态。如果接口已激活,则打印出IP地址和MAC地址。
(6)检查默认网关
echo "正在检查默认网关..."
default_gateway=$(ip route | grep default | awk '{print$3}')
if [ -z "$default_gateway" ]; then
echo "未找到默认网关。"
else
echo "默认网关: $default_gateway"
fi
检查系统的默认网关,如果找到则打印出来。
(7)检查DNS服务器
echo "正在检查DNS服务器配置..."
dns_servers=$(cat /etc/resolv.conf | grep nameserver | awk '{print$2}')
if [ -z "$dns_servers" ]; then
echo "未配置DNS服务器。"
else
echo "DNS服务器:"
for server in $dns_servers; do
echo "- $server"
done
fi
从 /etc/resolv.conf 文件中读取DNS服务器配置,并打印出来。
(8)进行 ping 测试
(a)输出标题说明接下来要进行网络连通性测试。
echo ""
echo " ======= ping 测试 =========="
(b)进行 ping 测试
echo "Testing connectivity to vidisit.cn (3 packets)..."
ping -c 3 vidisit.cn
使用 ping 命令测试到 vidisit.cn 的网络连通性,发送3个数据包。
(c)对其他主机测试方法
如果想对特定的主机进行测试,可以添加一个参数
if [ $ -eq 1 ]; then
echo "Testing connectivity to $1 (3 packets)..."
ping -c 3 $1
fi
如果脚本运行时提供了一个参数(即 $1),则使用该参数指定的主机名或IP地址进行 ping 测试。$ 表示传递给脚本的参数数量。
3、脚本应用和运行
(1)脚本文件
将上述脚本保存为一个文件,例如 network_check_ok.sh。
(2)赋予权限
赋予脚本执行权限,使用如下命令:
chmod +x network_check_ok.sh
(3)执行结果
运行脚本使用如下命令:
./network_check_ok.sh。
结果如下所示:
4、注意事项
(1)脚本中使用的命令(如 ip、systemd-resolve)在大多数现代Linux发行版中都是可用的,但在一些非常旧的发行版中可能不可用。
(2)对于DNS服务器,可以尝试使用 systemd-resolve(适用于使用systemd-resolved服务的系统),如果不可用,则回退到查看 /etc/resolv.conf 文件。但是查看 /etc/resolv.conf 最直接,所以本脚本采用此种方式。
(3)脚本的输出可能因系统配置和网络环境而异。
(4)脚本中没有包含错误处理逻辑,这在实际应用中可能是必要的。例如,可以添加一些检查来确保命令成功执行,并在失败时给出适当的错误消息。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。