Shell
在 shell 腳本的命令中插入變數
我正在嘗試編寫一個自動化腳本,它將在我的 /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}")
但這會與
$NF
from 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}')