Weisen Sie die NMAP-Ausgabe mehreren Variablen zu

Weisen Sie die NMAP-Ausgabe mehreren Variablen zu

Ich verwende nmap, um mein Netzwerk zu scannen und möchte jedes aktive Gerät anzeigen. Folgendes funktioniert hervorragend:

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

Was ich jetzt tun möchte, ist, jede Ausgabe in einer separaten Variable zu speichern.

Nehmen wir an, ipses ergibt sich diese Ausgabe:

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

var1Ich möchte nun (Gerät1) in , (Gerät2) in var2und (Gerät3) in speichern.var3

Wie könnte ich das tun?

Antwort1

Erstellen Sie nicht eine Reihe separater Skalarvariablen, sondern speichern Sie die Befehlsausgabe einfach in einem Array statt in einer Skalarvariablen. Anschließend können Sie darauf als ips[0], ips[1], usw. zugreifen. Verwenden Sie der Einfachheit printfhalber anstelle Ihrer aktuellen nmap | awkPipeline, um Ihre genaue Befehlsausgabe zu reproduzieren:

$ 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)")

Sehenhttps://stackoverflow.com/a/32931403/1745001für weitere Einzelheiten zum obigen Ansatz zum Speichern der Befehlsausgabe in einem Array im Vergleich zu anderen Ansätzen (readarray und mapfile sind Synonyme).

verwandte Informationen