atribuir saída do nmap a diversas variáveis

atribuir saída do nmap a diversas variáveis

Estou usando o nmap para escanear minha rede e quero mostrar todos os dispositivos que estão ativos. O seguinte funciona muito bem:

ips=$(nmap -sn 192.168.1.68/24 -oG - | awk '/Up$/{print $2, $3}')

O que eu quero agora é salvar cada saída em uma variável separada.

Digamos que ipsforneça esta saída:

$ echo "$ips"
xxx.xxx.x.1 (device1)
xxx.xxx.x.2 (device2)
xxx.xxx.x.3 (device3)

Agora quero salvar (dispositivo1) em var1, (dispositivo2) em var2e (dispositivo3) emvar3

Como eu poderia fazer isso?

Responder1

Não crie um monte de variáveis ​​escalares separadas, apenas salve a saída do comando em uma matriz em vez de uma variável escalar e então você poderá acessá-la como ips[0], ips[1], etc. saída exata do comando:printfnmap | awk

$ printf 'xxx.xxx.x.1 (device1)\nxxx.xxx.x.2 (device2)\nxxx.xxx.x.3 (device3)\n'
xxx.xxx.x.1 (device1)
xxx.xxx.x.2 (device2)
xxx.xxx.x.3 (device3)

$ ips=$(printf 'xxx.xxx.x.1 (device1)\nxxx.xxx.x.2 (device2)\nxxx.xxx.x.3 (device3)\n')

$ echo "$ips"
xxx.xxx.x.1 (device1)
xxx.xxx.x.2 (device2)
xxx.xxx.x.3 (device3)

$ readarray -t -d $'\n' ips < <(printf 'xxx.xxx.x.1 (device1)\nxxx.xxx.x.2 (device2)\nxxx.xxx.x.3 (device3)\n')

$ declare -p ips
declare -a ips=([0]="xxx.xxx.x.1 (device1)" [1]="xxx.xxx.x.2 (device2)" [2]="xxx.xxx.x.3 (device3)")

Verhttps://stackoverflow.com/a/32931403/1745001para obter mais detalhes sobre a abordagem acima para salvar a saída do comando em uma matriz versus outras abordagens (readarray e mapfile são sinônimos).

informação relacionada