Linux

如何在 Bash 腳本中將主機名解析為 IP 地址?

  • August 17, 2021

在 Bash 腳本中將主機名解析為 IP 地址的最簡潔方法是什麼?我正在使用Arch Linux

您可以使用getent附帶的 , glibc(因此您幾乎可以肯定在 Linux 上擁有它)。這使用 gethostbyaddr/gethostbyname2 解決,因此也將檢查/etc/hosts/NIS/etc:

getent hosts unix.stackexchange.com | awk '{ print $1 }'

或者,正如 Heinzi 下面所說,您可以使用dig參數+short(直接查詢 DNS 伺服器,不查看/etc/hosts/NSS/etc):

dig +short unix.stackexchange.com

如果dig +short不可用,則以下任何一項都應該有效。所有這些都直接查詢 DNS 並忽略其他解析方式:

host unix.stackexchange.com | awk '/has address/ { print $4 }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 }'

如果您只想列印一個 IP,則將該exit命令添加到awk的工作流程中。

dig +short unix.stackexchange.com | awk '{ print ; exit }'
getent hosts unix.stackexchange.com | awk '{ print $1 ; exit }'
host unix.stackexchange.com | awk '/has address/ { print $4 ; exit }'
nslookup unix.stackexchange.com | awk '/^Address: / { print $2 ; exit }'
dig unix.stackexchange.com | awk '/^;; ANSWER SECTION:$/ { getline ; print $5 ; exit }'

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