我有一个shell脚本,我试图同时ping多个IP
#!/bin/sh
#-------------------------------
#Decleration of IP Address
#-------------------------------
IP_linux32='135.24.229.174'
IP_linux64='135.24.228.128'
IP_freeBSD32='135.24.228.104'
IP_freeBSD64='135.24.228.129'
DUMMY='135.24.229.0'
count_linux32=$( ping -c2 -i5 $IP_linux32 |grep icmp* ) &
count_linux64=$( ping -c2 -i5 $IP_linux64 |grep icmp* ) &
count_freeBSD32=$( ping -c2 -i5 $IP_freeBSD32 |grep icmp* ) &
count_freeBSD64=$( ping -c2 -i5 $IP_freeBSD64 |grep icmp* ) &
dummy=$( ping -c2 -i5 $DUMMY |grep icmp* ) &
sleep 6
if [[ ( "$count_linux32" -eq 0 && "$count_linux64" -eq 0 ) ]]
then
echo "Linux is up"
else
echo "Linux not up"
fi
if [[ ( "$count_freeBSD32" -eq 0 && "$count_freeBSD64" -eq 0 ) ]]
then
echo "BSD is up"
else
echo "BSD si not up"
fi
if [[ "$dummy" -eq 0 ]]
then
echo "Dummy is up"
else
echo "Dummy is not up"
fi
Dummy是假IP,根据代码应该失败,但我仍然得到“Dummy is up”而不是“Dummy is not up”。
我做错了什么。
我尝试过很多解决方案,但我仍然无法弄清楚
答案 0 :(得分:1)
根据评论更新:
在文件中列出您的ips,例如list.txt
。它可能看起来像:
192.168.0.21
192.168.0.53
.
.
.
192.168.0.137
然后您可以使用以下脚本:
#!/bin/bash
# Program name: ping_all_ips.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
这将为您提供节点的状态。您甚至可以将结果存储在文件./ping_all_ips.sh > ping_log.txt
中,或使用crontab
计划任务。
同时Ping?
根据最近的评论
对于真正的同时发生的事情,我想你必须使用支持multithreading
的语言,例如Cuda
。但是出于所有实际目的,以下代码将告诉您所有节点是否已启动。
#!/bin/bash
# Program name: ping_all_ips.sh
date
cat ip.txt | xargs -n 1 -I ^ -P 50 ping -c2 ^ > log.txt
if grep -q 'Unreachable' log.txt
then
echo "All hosts are not up"
else
echo "All hosts are up"
fi
答案 1 :(得分:0)
您可以尝试nmap
,但它也会按顺序进行测试。
nmap -sP ADDR1 ADDR2 ADDR3