Shell

在 shell 腳本的命令中插入變數

  • December 10, 2015

我正在嘗試編寫一個自動化腳本,它將在我的 /etc/hosts 文件中更新我的樹莓派的 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 地址。我已經盡可能多地嘗試了這個,但我似乎無法讓它工作。有任何想法嗎?

您正在使用 '. 不會擴展 shell 變數,因此在這種情況下實際上是 string 。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}")

但這會與$NFfrom 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}')

引用自:https://unix.stackexchange.com/questions/248490