使用bash ping多个IP?

我有10个IP号码,我每天都要ping它以进行检查,如何使用BASH脚本来做到这一点。 这样我就可以使用cron自动执行该任务。 我只想要BASH脚本。

谢谢。

由于您的ip范围没有对称性且只有10个节点,我建议将它们列在文本文件中。 我正在考虑包含列表的文件是list.txt ,其中包含每行ip的列表,如下所示,

 10.12.13.14 172.15.48.3 192.168.45.54 ... 48.114.78.227 

你可以使用这个脚本,

 #!/bin/bash # Program name: pingall.sh date cat /path/to/list.txt | while read output do ping -c 1 "$output" > /dev/null if [ $? -eq 0 ]; then echo "node $output is up" else echo "node $output is down" fi done 

要在crontab上以30分钟的间隔更新节点的运行状态,

 */30 * * * * /path/to/pingall.sh > /path/to/log.txt 

log.txt的输出

 $ cat /path/to/log.txt Fri Jan 31 15:06:01 IST 2014 node 10.12.13.14 is up node 172.15.48.3 is up node 192.168.45.54 is up ... node 48.114.78.227 is down 
 #!/bin/bash while read hostname do ping -c 1 -t 1 "$hostname" > /dev/null 2>&1 && echo "Ping Status of $hostname : Success" || echo "Ping Status of $hostname : Failed" done < host.txt 

$ cat host.txt

 host1.example.com 192.168.0.123 8.8.8.8 ... ... google.com 

看到:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/

检查此脚本。

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

例如,运行./script 192.168.1 0 10这将使ips 192.168.1.0 ckeck为192.168.1.10并且如果ping正常则回应echo并且如果没有则不响应。

注意:如果范围和IP始终相同,您可以用静态变量替换$ 1 $ 2 $ 3。

 echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 

或者使用grep,只能看到非ping节点

 echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 | grep -b1 100 

很简单:使用parallel --gnu命令然后使用命令。

获取示例IP:

 $ dig +trace google.com |ipx 127.0.0.1 127.0.0.1 199.7.91.13 199.7.91.13 192.48.79.30 192.48.79.30 173.194.33.161 173.194.33.165 173.194.33.163 173.194.33.164 173.194.33.174 173.194.33.160 173.194.33.167 173.194.33.166 173.194.33.162 173.194.33.169 173.194.33.168 216.239.32.10 216.239.32.10 $ parallel --gnu ping -c1 ::: `dig +trace google.com |ipx` PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.018 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 ms PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.017 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.017/0.017/0.017/0.000 ms PING 173.194.33.132 (173.194.33.132) 56(84) bytes of data. 64 bytes from 173.194.33.132: icmp_req=1 ttl=54 time=20.5 ms --- 173.194.33.132 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 20.526/20.526/20.526/0.000 ms PING 173.194.33.131 (173.194.33.131) 56(84) bytes of data. 64 bytes from 173.194.33.131: icmp_req=1 ttl=54 time=20.7 ms 

假设您有5个IP(仅减少答案),那么您可以使用它们进行ping操作

 #!/usr/bin/bash for i in xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxxx do ping -c 5 $i done 

注意:不是curl括号,IP之间没有逗号(,)。

希望有所帮助。

例如:

 [raja @ scripts]$ cat ping.sh for i in 74.125.236.70 98.139.183.24 65.55.206.228 91.189.94.156 198.252.206.24 do ping -c 5 $i done [raja @ scripts]$ ./ping.sh PING 74.125.236.70 (74.125.236.70) 56(84) bytes of data. 64 bytes from 74.125.236.70: icmp_seq=1 ttl=128 time=11.5 ms 64 bytes from 74.125.236.70: icmp_seq=2 ttl=128 time=11.0 ms 64 bytes from 74.125.236.70: icmp_seq=3 ttl=128 time=10.9 ms 64 bytes from 74.125.236.70: icmp_seq=4 ttl=128 time=16.5 ms 64 bytes from 74.125.236.70: icmp_seq=5 ttl=128 time=18.2 ms --- 74.125.236.70 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4025ms rtt min/avg/max/mdev = 10.966/13.682/18.291/3.120 ms PING 98.139.183.24 (98.139.183.24) 56(84) bytes of data. 64 bytes from 98.139.183.24: icmp_seq=1 ttl=128 time=244 ms 64 bytes from 98.139.183.24: icmp_seq=2 ttl=128 time=253 ms 64 bytes from 98.139.183.24: icmp_seq=3 ttl=128 time=255 ms 64 bytes from 98.139.183.24: icmp_seq=4 ttl=128 time=251 ms 64 bytes from 98.139.183.24: icmp_seq=5 ttl=128 time=243 ms --- 98.139.183.24 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4251ms rtt min/avg/max/mdev = 243.511/249.623/255.275/4.674 ms PING 65.55.206.228 (65.55.206.228) 56(84) bytes of data. From 10.22.96.94 icmp_seq=5 Packet filtered --- 65.55.206.228 ping statistics --- 5 packets transmitted, 0 received, +1 errors, 100% packet loss, time 14002ms PING 91.189.94.156 (91.189.94.156) 56(84) bytes of data. 64 bytes from 91.189.94.156: icmp_seq=1 ttl=128 time=240 ms 64 bytes from 91.189.94.156: icmp_seq=2 ttl=128 time=240 ms 64 bytes from 91.189.94.156: icmp_seq=3 ttl=128 time=240 ms 64 bytes from 91.189.94.156: icmp_seq=4 ttl=128 time=240 ms 64 bytes from 91.189.94.156: icmp_seq=5 ttl=128 time=240 ms --- 91.189.94.156 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4242ms rtt min/avg/max/mdev = 240.060/240.222/240.309/0.626 ms PING 198.252.206.24 (198.252.206.24) 56(84) bytes of data. 64 bytes from 198.252.206.24: icmp_seq=1 ttl=128 time=237 ms 64 bytes from 198.252.206.24: icmp_seq=2 ttl=128 time=237 ms 64 bytes from 198.252.206.24: icmp_seq=3 ttl=128 time=237 ms 64 bytes from 198.252.206.24: icmp_seq=4 ttl=128 time=237 ms 64 bytes from 198.252.206.24: icmp_seq=5 ttl=128 time=242 ms --- 198.252.206.24 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4251ms rtt min/avg/max/mdev = 237.600/238.575/242.291/1.933 ms