nmap出力を複数の変数に割り当てる

nmap出力を複数の変数に割り当てる

私はネットワークをスキャンするためにnmapを使用しており、電源が供給されているすべてのデバイスを表示したいと思います。以下はうまくいきます。

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

今私が望むのは、各出力を別々の変数に保存することです。

ips次の出力が提供されているとします。

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

var1今、(device1)を(device2)var2と(device3)に保存したいと思います。var3

どうすればいいですか?

答え1

別々のスカラー変数を複数作成する代わりに、スカラー変数の代わりに配列にコマンド出力を保存してからなどを使用してアクセスできます。ips[0]簡単にするために、現在のパイプの代わりにips[1]使用して正確なコマンド出力を再現します。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)")

バラよりhttps://stackoverflow.com/a/32931403/1745001上記のコマンド出力を配列に保存する方法とは異なる方法についての詳細があります(readarrayとmapfileは同義語です)。

関連情報