Efficient way to get ip addresses based on a list

2019-03-01 17:08发布

I had to gather a list of IP addresses from a list of hostnames, this is what I came up with:

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

Is there a more efficient way to do this?

标签: shell grep
1条回答
疯言疯语
2楼-- · 2019-03-01 17:38

If you mean the latency gets you down, you can do them all in parallel with GNU Parallel:

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

The -a hosts assumes you have the hostnames in a file called hosts.

hosts:

virgin
router

Output:

virgin(192.168.100.1)
router(192.168.0.1)

Or, if you don't want a file of hostnames, you can use your loop:

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

Alternatively, have a look in the arp cache...

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
查看更多
登录 后发表回答