Linux
如何在 Bash 腳本中將主機名解析為 IP 地址?
在 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 }'