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

时间:2013-12-17 09:05:46

标签: linux bash

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

alpha, 192.168.1.1
beta,  192.168.1.2
gamma, 192.168.1.3

我正在尝试创建一个类似于:

的脚本

“Pinging hostname alpha”

ping 192.168.1.1

并跳转到列表中的下一个ip。 我不想要整个脚本,只需要一些建议。

谢谢, 亚历

5 个答案:

答案 0 :(得分:3)

如果您在输入字段分隔符中添加逗号,它将帮助解析这些行:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

您可以使用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.

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

试试这个

#!/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