我正在尝试编写一个自动脚本,它将更新我的 /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}'
.
'
不扩展 shell 变量,因此$MY_MAC
在这种情况下实际上是 string $MY_MAC
。
您可以使用双引号来扩展变量
IP=$(sudo nmap -sP $MY_LOCAL_IP_SUBNET | awk "/^Nmap/{ip=$NF}/$MY_MAC/{print ip}")
但这会与$NF
awk 冲突。
因此,使用该-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}')