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 
$
相关推荐
梦星辰.39 分钟前
VSCode CUDA C++进行Linux远程开发
linux·c++·vscode
知之则吱吱42 分钟前
亚马逊AWS云服务器高效使用指南:最大限度降低成本的实战策略
服务器·云计算·aws
远方16091 小时前
0x-2-Oracle Linux 9上安装JDK配置环境变量
java·linux·oracle
cui_win1 小时前
每日一令:Linux 极简通关指南 - 汇总
linux·运维·服务器
狐571 小时前
2025-06-02-IP 地址规划及案例分析
网络·网络协议·tcp/ip
知星小度S1 小时前
Linux权限探秘:驾驭权限模型,筑牢系统安全
linux·运维·服务器
黎茗Dawn1 小时前
5.子网划分及分片相关计算
网络·智能路由器
黄交大彭于晏1 小时前
发送文件脚本源码版本
java·linux·windows
恰薯条的屑海鸥2 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十四期-XXE模块)
网络·学习·安全·web安全·渗透测试
科技小E2 小时前
口罩佩戴检测算法AI智能分析网关V4工厂/工业等多场景守护公共卫生安全
网络·人工智能