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 
$
相关推荐
驭渊的小故事13 分钟前
UDP 和 TCP 网络知识和“Udp协议的回声服务器详细剖析”(5000字详细解析回升服务器的点点滴滴)(网络编程01)
网络
砚凝霜24 分钟前
软考网络工程师|第 2 章 信道延迟、传输介质、数据编码、数字调制、PCM 完整备考笔记
网络·笔记·pcm
不会就选b30 分钟前
linux之进程管理(二)--替换
linux·运维·服务器
倔强的石头10635 分钟前
【Linux指南】动静态库系列(二):从源码复用到目标文件复用:为什么需要把 .o 打包成库
linux·运维·服务器
aixingkong92140 分钟前
Atlas 950 1024卡SuperPoD推测分析
网络·人工智能·硬件架构·硬件工程
码农学院41 分钟前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
步步精BBJconn44 分钟前
从GPU服务器到数据中心:AI服务器高压连接器的应用与发展趋势
大数据·运维·服务器·人工智能·科技·物联网
码农学院3 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
爱写代码的森9 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei