
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 ips
forneç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 var2
e (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:printf
nmap | 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).