在 shell 脚本内的命令中插入变量

在 shell 脚本内的命令中插入变量

我正在尝试编写一个自动脚本,它将更新我的 /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}")

但这会与$NFawk 冲突。

因此,使用该-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}')

相关内容