简体   繁体   中英

Linux bash script that pings multiple IP addresses from a file

I have a file containing multiple hosts and IPs in the format above:

alpha, 192.168.1.1
beta,  192.168.1.2
gamma, 192.168.1.3

I am trying to create a script that says something like:

"Pinging hostname alpha"

ping 192.168.1.1

and jump to the next ip in the list. I don't want the entire script, just some suggestions.

Thanks, Alex

If you add a comma to the input field separator, it'll help parse the lines:

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

I'd read in the lines with read . You'll probably also want to give ping an option telling it how many times to ping. The default on most Linux systems for example is to ping forever, which doesn't seem like it would work well in your situation.

You could use 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.

You can also remove that comma if is it important to you:

$ 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.

I might be a bit late to the party, but how about fping ? Use -f to read from a file (requires sudo), or pipe the file with < (as suggested on the man page). It won't tell you "pinging alpha", but it will quickly tell you whether or not you can get in touch with the hosts.

Script for hosting 100+ hosts in same scheme like 192.168.xx.xxx

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

command to ping the host

bash test.sh 192.168.1 0 100

Try this

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM