从文件ping多个IP地址的Linux bash脚本

li9yvcax  于 2022-12-03  发布在  Linux
关注(0)|答案(6)|浏览(219)

我有一个包含多个主机和IP的文件,格式如下:

alpha, 192.168.1.1
beta,  192.168.1.2
gamma, 192.168.1.3

我正在尝试创建一个脚本,内容如下:
“正在Ping主机名alpha”

ping 192.168.1.1

然后跳转到列表中的下一个IP。我不需要整个脚本,只需要一些建议。
谢谢你,亚历克斯

tp5buhyn

tp5buhyn1#

如果在输入字段分隔符中添加逗号,将有助于解析以下行:

IFS=$IFS,
while read name ip; do
    echo -n "Pinging hostname $name..."
    ping -c2 "$ip" &>/dev/null && echo success || echo fail
done < /tmp/hosts
nlejzf6q

nlejzf6q2#

我读到了read的行。您可能还想给予ping一个选项,告诉它ping多少次。例如,大多数Linux系统的默认设置是永远ping,这在您的情况下似乎不太好用。

4sup72z8

4sup72z83#

您可以使用AWK

$ awk '{print "Pinging hostname "$1; system("ping -c 3 "$2) }' ips
Pinging hostname alpha,
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

如果逗号对您很重要,您也可以删除它:

$ awk '{sub(/,/,"");print "Pinging hostname "$1; system("ping -c 3 "$2) }' ips
Pinging hostname alpha
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
l3zydbqr

l3zydbqr4#

我可能会迟到一点,但是fping怎么样?使用-f读取文件(需要sudo),或者使用〈管道传输文件(如手册页上所建议的)。它不会告诉您“ping alpha”,但它会很快告诉您是否可以与主机取得联系。

mepcadol

mepcadol5#

用于在相同方案(如192.168.xx.xxx)中托管100台以上主机的脚本
#!/bin/bash
    for i in `seq ${2} ${3}`
    do
        ping -c 1 ${1}.${i} > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "${1}.${i} responded."
        else
            echo "${1}.${i} did not respond."
        fi
    done

用于ping主机的命令
bash test.sh 192.168.1 0 100

pgky5nke

pgky5nke6#

试试这个

#!/bin/bash
IPLIST="path_to_the_Ip_list_file"

for ip in $(cat $IPLIST)

do
    ping $ip -c 1 -t 1 &> /dev/null
    if [ $? -ne 0 ]; then

        echo $ip ping faild;

        else

        echo $ip ping passed;

    fi

done

相关问题