내 /etc/hosts 파일에서 Raspberry Pi의 IP 주소를 업데이트하는 자동화된 스크립트를 작성하려고 합니다.
이 줄을 잘 실행할 수 있습니다.
IP=`sudo nmap -sP 10.61.4.0/24 | awk '/^Nmap/{ip=$NF}/B8:27:EB/{print ip}'`
하지만 변수를 사용하여 IP 주소 서브넷 및/또는 MAC 주소를 쉽게 수정하여 스크립트를 더욱 모듈화할 수 있기를 바랍니다. 따라서 스크립트를 실행할 때 제공해야 하는 일부 터미널 입력과 동일한 MY_MAC 및 MY_LOCAL_IP_SUBNET 변수를 만들었습니다.
나는 다음과 같은 일을 할 수 있기를 원합니다.
IP=`sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk '/^Nmap/{ip=$NF}/$MY_MAC/{print ip}'`
작동합니다. MY_LOCAL_IP_SUBNET 변수를 사용하여 작동하도록 만들었지만 MY_MAC 변수를 사용할 때 IP 주소를 반환하지 않습니다. 이 문제를 해결하기 위해 할 수 있는 모든 노력을 다했지만 제대로 작동하지 않는 것 같습니다. 어떤 아이디어가 있나요?
답변1
쉘 변수를 확장 하지 않고
'
. 을 사용하고 있으므로 이 경우 실제로는 문자열입니다 .awk '/^Nmap/{ip=$NF}/$MY_MAC/{print ip}'
'
$MY_MAC
$MY_MAC
큰따옴표를 사용하여 변수를 확장할 수 있습니다.
IP=$(sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk "/^Nmap/{ip=$NF}/$MY_MAC/{print ip}")
그러나 이것은 awk와 충돌합니다 $NF
.
따라서 해당 -v
플래그를 사용하여 변수를 추가 awk
하고 이를 사용하여 $0~mymac
현재 행을 다음의 패턴과 일치시킵니다.mymac
IP=$(sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk -v mymac="$MY_MAC" '/^Nmap/{ip=$NF}$0~mymac{print ip}')