Многолинейный вывод AWK в массив

У меня есть некоторые проблемы со сценарием, который я пишу. В основном я хочу получить список активных IP-адресов и добавить их в массив. Но, к сожалению, посмотрев везде, я не совсем нашел решение.

Пока у меня есть это:

#!/bin/bash
ipnet="192.168.0.0/24"
tail /proc/uptime | grep -o '^\S*'
Iparray=($(nmap -n -sn $ipnet -oG - | awk '/Up$/{print $2}'))
echo $Iparray[3]
echo "Active IPs:"
for i in "${Iparray[@]}"
do
    :
    echo $Iparray[$i]
done

Но вместо ожидаемого вывода в виде списка IP-адресов я получаю следующее:

16977.41
192.168.0.1[3]
Active IPs:
192.168.0.1[192.168.0.1]
192.168.0.1[192.168.0.2]
192.168.0.1[192.168.0.3]
192.168.0.1[192.168.0.4]
...
192.168.0.1[192.168.0.254]

Не совсем уверен, что происходит... Любая помощь будет оценена.

1 ответ

Решение

Очень маленькая проблема:

${Iparray[@]} это список IP-адресов, так что вы можете:

for ip in ${Iparray[@]}; do
    echo $ip
done

ИЛИ ЖЕ

Если вы действительно хотите использовать индексы:

for  (( i=0; i<${#Iparray[@]}; i++ )) ; do 
      echo ${Iparray[$i]}
done
Другие вопросы по тегам