shell_52.Linux测试与其他网络主机的连通性脚本

实战演练

本节将展示一个实用脚本,该脚本在处理用户输入的同时,使用 ping 命令或 ping6 命令来测试与其他网络主机的连通性。

ping 命令或 ping6 命令可以快速测试网络主机是否可用。这个命令很有用,经常作为首选工具。如果只是检查单个主机,那么直接使用该命令即可。

但是如果有数个甚至数百个主机需要检查,则 shell 脚本可以助你一臂之力。

这个脚本通过两种方法来选择要检查的主机:一是使用命令行选项,二是使用文件。下面是

该脚本在 Ubuntu 系统中使用命令行选项的用法演示:

复制代码
$ ./CheckSystems.sh -t IPv4 192.168.1.102 192.168.1.104 
Checking system at 192.168.1.102... 
[...] 
--- 192.168.1.102 ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss,[...] 
Checking system at 192.168.1.104... 
[...] 
--- 192.168.1.104 ping statistics --- 
3 packets transmitted, 0 received, +3 errors, 100% packet loss,[...] 
$

如果没有指定 IP 地址参数,则脚本会提示用户并退出:

复制代码
$ ./CheckSystems.sh -t IPv4 
IP Address(es) parameters are missing. 
Exiting script... 
$


$ cat CheckSystems.sh 
#!/bin/bash 
# Check systems on local network allowing for 
# a variety of input methods. 
# 
# 
########### Determine Input Method ################### 
# 
# Check for command-line options here using getopts. 
# If none, then go on to File Input Method 
# 
while getopts t: opt 
do 
    case "$opt" in 
        t) # Found the -t option 
        if [ $OPTARG = "IPv4" ] 
        then 
            pingcommand=$(which ping) 
 #
        elif [ $OPTARG = "IPv6" ] 
        then 
            pingcommand=$(which ping6) 
 # 
        else 
            echo "Usage: -t IPv4 or -t IPv6" 
            echo "Exiting script..." 
            exit 
        fi 
        ;; 
        *) echo "Usage: -t IPv4 or -t IPv6" 
            echo "Exiting script..." 
        exit;; 
        esac 
 # 
    shift $[ $OPTIND - 1 ] 
 # 
    if [ $# -eq 0 ] 
    then 
        echo 
        echo "IP Address(es) parameters are missing." 
        echo 
        echo "Exiting script..." 
        exit 
    fi 
 # 
    for ipaddress in "$@" 
    do 
        echo 
        echo "Checking system at $ipaddress..." 
        echo 
        $pingcommand -q -c 3 $ipaddress 
        echo 
    done 
    exit 
done 
# 
########### File Input Method ################### 
# 
echo 
echo "Please enter the file name with an absolute directory reference..." 
echo 
choice=0 
while [ $choice -eq 0 ] 
do 
    read -t 60 -p "Enter name of file: " filename 
    if [ -z $filename ] 
    then 
        quitanswer="" 
        read -t 10 -n 1 -p "Quit script [Y/n]? " quitanswer 
 #
        case $quitanswer in 
            Y | y) echo 
                echo "Quitting script..." 
                exit;; 
            N | n) echo 
                echo "Please answer question: " 
                choice=0;; 
            *) echo 
                echo "No response. Quitting script..." 
                exit;; 
        esac 
        else 
        choice=1 
    fi 
done 
# 
if [ -s $filename ] && [ -r $filename ] 
then 
    echo "$filename is a file, is readable, and is not empty." 
    echo 
    cat $filename | while read line 
    do 
        ipaddress=$line 
        read line 
        iptype=$line 
        if [ $iptype = "IPv4" ] 
        then 
            pingcommand=$(which ping) 
        else 
            pingcommand=$(which ping6) 
        fi 
        echo "Checking system at $ipaddress..." 
        $pingcommand -q -c 3 $ipaddress 
        echo 
    done 
    echo "Finished processing the file. All systems checked." 
else 
    echo 
    echo "$filename is either not a file, is empty, or is" 
    echo "not readable by you. Exiting script..." 
fi 
# 
#################### Exit Script ##################### 
# 
exit 
$
相关推荐
小辰记事本1 天前
从零读懂RoCEv2数据包构造:从WQE到线缆上的完整旅程
服务器·网络·网络协议·rdma
小鹏linux1 天前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
北京耐用通信1 天前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
在角落发呆1 天前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
齐潇宇1 天前
Zabbix 7 概述与配置
linux·zabbix·监控告警
江公望1 天前
Ubuntu htop命令,10分钟讲清楚
linux·服务器
哎呦,帅小伙哦1 天前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
张小姐的猫1 天前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
YMWM_1 天前
UDP协议详解:从原理到Python实践
网络·网络协议·udp
pengyi8710151 天前
共享 IP 与独享 IP 怎么选?被封后升级方案避坑
网络·网络协议·tcp/ip