쉘 스크립트 내의 명령에 변수 삽입

쉘 스크립트 내의 명령에 변수 삽입

내 /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}')

관련 정보