基于主机名列表获取IP地址的有效方法

时间:2014-09-11 14:40:58

标签: shell grep

我必须从主机名列表中收集IP地址列表,这就是我想出的:

#!/bin/bash                                                                                                
Hosts='host1 host2 host3 host4 host5 host6 host7' 

for h in $Hosts                                                                                            
do                                                                                                         
    echo "$h : " $(ping -c 1 $h | egrep -o -m 1 '\([0-9]+\.[^\(\r\n]*\)')    done 

有更有效的方法吗?

1 个答案:

答案 0 :(得分:5)

如果你的意思是延迟让你失望,你可以与GNU Parallel并行完成所有这些:

parallel -a hosts 'echo -n {}; ping -c1 {} |egrep -o -m 1 "\([0-9]+\.[^\(\r\n]*\)"'

-a hosts假设您在名为hosts的文件中拥有主机名。

<强>主机:

virgin
router

<强>输出:

virgin(192.168.100.1)
router(192.168.0.1)

或者,如果您不想要主机名文件,可以使用循环:

for h in virgin router; do 
   echo $h; 
done | parallel 'echo -n {}; ping -c1 {} |egrep -o -m 1 "\([0-9]+\.[^\(\r\n]*\)"'

或者,查看arp缓存...

arp router
router.asus.com (192.168.0.1) at 8:60:6e:ba:17:c8 on en0 ifscope [ethernet]

arp virgin
virgin (192.168.100.1) -- no entry