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은 동의어입니다).

관련 정보