如何:查询一个域名中的若干主机名,并生成BIND风格的zone文件
问题
假设我们有一个列表:a, b, c, d。我们希望返回 example.com 中这些主机的A记录和AAAA记录。
解
用文本处理工具(例如sed/awk或是tr,此处略)将列表改写为正确的分割方式,例如一行一个,或是直接写在命令行里用空格分开(比如写作
a b c d
这样),就可以用 shell 的 for 来遍历列表了。
例如,如果是放到一个文本文件
list
中:
while read HOST; do ... done < list
或者直接写在命令行里:
for HOST in a b c d; do ... done
核心命令是 dig(1)。例如,
dig ${host}.${DOMAIN} A +noall +answer +nocmd +nottl
这样脚本变成了:
DOMAIN=example.com for HOST in a b c d; do dig ${host}.${DOMAIN} A +noall +answer +nocmd +nottl done
但这都2025年了,还不支持IPv6就太不讲究了,所以再增加一层循环:
DOMAIN=example.com for HOST in a b c d; do for TYPE in A AAAA; do dig ${host}.${DOMAIN} ${TYPE} +noall +answer +nocmd +nottl done done