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 
$
相关推荐
戴为沐11 小时前
Linux内存扩容指南
linux
zylyehuo1 天前
Linux 彻底且安全地删除文件
linux
用户805533698031 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297911 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者3 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo3 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10154 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao5 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3106 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode6 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏