我把所有我想dig +trace -x
的IP都放在一个名为'ips'的文件中。
我只想查看 IP 的 ns1(和/或)ns2 记录,并将 IP 和 ns1 或 ns2 记录输出在同一行上,如下所示:
1 - $IP - $NS
2 - $IP - $NS
etc.
现在,我只有一个脚本,我称之为"digdug",看起来像这样......
for i in `cat ips`
do
dig +trace -x $i | tail -n7
done
然后我能够通过运行看到它正在挖掘的 IP:bash -x digdug
但是,我真正需要的是一行上的 IP 和 ns 记录,然后是列表中的下一个 IP,下一行是 ns 记录。然后是下一个,依此类推。
任何帮助将不胜感激!
bash 4 中的另一种解决方案:
while read ip; do
while read ns; do
echo -e "$ipt$ns";
done < <(dig +trace -x $ip | grep -i "ns[12]")
done < ips
我更喜欢使用while TEST; do CMD; done < file
,因为它没有分叉子壳。
< <(cmd)
用于函数替换。与<
重定向一样,bash 不会创建子外壳。
例如,这是谷歌IP的结果(173.164.67.9[1-5]):
173.194.67.91 194.173.in-addr.arpa. 86400 IN NS NS1.GOOGLE.COM.
173.194.67.91 194.173.in-addr.arpa. 86400 IN NS NS2.GOOGLE.COM.
173.194.67.92 194.173.in-addr.arpa. 86400 IN NS NS2.GOOGLE.COM.
173.194.67.92 194.173.in-addr.arpa. 86400 IN NS NS1.GOOGLE.COM.
173.194.67.92 67.194.173.in-addr.arpa. 60 IN SOA ns1.google.com. dns-admin.google.com. 1497777 21600 3600 1209600 10800
173.194.67.93 194.173.in-addr.arpa. 86400 IN NS NS2.GOOGLE.COM.
173.194.67.93 194.173.in-addr.arpa. 86400 IN NS NS1.GOOGLE.COM.
173.194.67.94 194.173.in-addr.arpa. 86400 IN NS NS2.GOOGLE.COM.
173.194.67.94 194.173.in-addr.arpa. 86400 IN NS NS1.GOOGLE.COM.
173.194.67.95 194.173.in-addr.arpa. 86400 IN NS NS1.GOOGLE.COM.
173.194.67.95 194.173.in-addr.arpa. 86400 IN NS NS2.GOOGLE.COM.
希望这会有所帮助
也许是这样的?
for ip in `cat ips`; do
ns=`dig +trace -x $ip | tail -n7 | awk '/NS/ {print $NF}'`
echo "$ip - $ns" | tr 'n' ' '
echo ""
done