I had to gather a list of IP addresses from a list of hostnames, this is what I came up with:
#!/bin/bash
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