Многолинейный вывод 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