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)

이제 (device1)을 에 var1, (device2)를 에 var2, (device3)을 에 저장하고 싶습니다.var3

내가 어떻게 그렇게 할 수 있니?

답변1

ips[0]별도의 스칼라 변수를 여러 개 생성하지 말고 스칼라 변수 대신 배열에 명령 출력을 저장하면 , ips[1]등 으로 액세스할 수 있습니다. 단순화를 위해 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)")

보다https://stackoverflow.com/a/32931403/1745001명령 출력을 배열에 저장하는 위의 접근 방식과 다른 접근 방식에 대한 자세한 내용을 알아보세요(readarray와 mapfile은 동의어입니다).

관련 정보