我有一堆域的 txt,我需要在其上运行 dig +short mx。
我已经设置了一个脚本来运行该命令,将其打印到 results.txt 中:
./dig_domain_mx.sh > results.txt
缺点是,我需要能够知道哪些域与每个结果相关,因此我的解决方案是打印脚本正在读取的当前行,然后打印该行的 dig 输出,然后添加换行符。
我似乎找不到任何暗示仅使用 dig 命令就可以做到这一点的内容,那么我将如何在我的 Bash 脚本中解决这个问题呢?
当前的 Bash 脚本,没什么特别的:
#!/bin/bash
dig -f domains.txt +short mx
答案1
为了避免运行文件的每一行,您可以这样做dig
:read
dig -f domains.txt mx +noall +answer
这会给出如下输出:
stackexchange.com. 300 IN MX 5 alt1.aspmx.l.google.com.
stackexchange.com. 300 IN MX 1 aspmx.l.google.com.
stackexchange.com. 300 IN MX 10 alt3.aspmx.l.google.com.
stackexchange.com. 300 IN MX 10 alt4.aspmx.l.google.com.
stackexchange.com. 300 IN MX 5 alt2.aspmx.l.google.com.
google.com. 600 IN MX 10 aspmx.l.google.com.
google.com. 600 IN MX 30 alt2.aspmx.l.google.com.
google.com. 600 IN MX 20 alt1.aspmx.l.google.com.
google.com. 600 IN MX 40 alt3.aspmx.l.google.com.
google.com. 600 IN MX 50 alt4.aspmx.l.google.com.
您可以通过管道awk '{print $1,$5,$6}'
删除300 英寸 MX。
循环的替代方案while read
可以是 xargs:
$ xargs -tn1 dig mx +short < domains.txt
dig mx +short stackexchange.com
1 aspmx.l.google.com.
10 alt3.aspmx.l.google.com.
10 alt4.aspmx.l.google.com.
5 alt2.aspmx.l.google.com.
5 alt1.aspmx.l.google.com.
dig mx +short google.com
20 alt1.aspmx.l.google.com.
30 alt2.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.