首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BASH同时using多个IP

问使用BASH同时using多个IP
EN

Stack Overflow用户
提问于 2016-03-08 18:28:59
回答 2查看 1.7K关注 0票数 0

我有一个shell脚本,其中我试图同时ping多个IP的同时

代码语言:javascript
复制
#!/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”。

我有什么地方做错了吗?

我试着参考了很多解决方案,但还是想不出办法。

EN

回答 2

Stack Overflow用户

发布于 2016-03-08 19:39:23

根据评论更新的:

在一个文件中列出你的ips,比如list.txt。它可能看起来像这样:

代码语言:javascript
复制
192.168.0.21
192.168.0.53
.
.
.
192.168.0.137

然后,您可以使用以下脚本:

代码语言:javascript
复制
#!/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安排任务。

用于同时Pinging的

根据最近的评论

对于真正的同时发生的事情,我想你必须使用像Cuda这样支持multithreading的语言。但出于所有实际目的,下面的代码将告诉您所有节点是否都已启动。

代码语言:javascript
复制
#!/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
EN

Stack Overflow用户

发布于 2016-03-09 20:33:01

您可以尝试使用nmap,但它也会按顺序进行测试。

代码语言:javascript
复制
nmap -sP ADDR1 ADDR2 ADDR3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35864884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档