2015-04-14 87 views
0

我正在将客户的WHM/cPanel帐户迁移到新服务器,但他有很多很多站点托管在服务器上,我需要检索其名称服务器。在多个域名上查找名称服务器的脚本

我想建立一个bash脚本,分析文件(与在单独的行的每个结构域),执行和whois,发现域名服务器和IP,然后输出该域及其名称服务器到另一个文件。

我对bash不是很满意,但是我发现并编辑了这个脚本 - 但它似乎并不想工作。如果任何人有任何见解,那就太好了。谢谢!

#!/bin/bash 
# dig $line +short >> ip address 
# whois $line >> Lists full details including the name servers 
# whois $line | grep "Name Server" | cut -d ":" -f 2 | sed 's/ //' | 
# sed -e :a -e '$!N;s/ \n/,/;ta'` 
while read inputfile 
do 
echo $domain 
ipaddress=`dig $domain +short` 
nameserver=`whois $domain | grep "Name Server" | cut -d ":" -f 2 |  
sed 's/ //' | sed -e :a -e '$!N;s/ \n/,/;ta'` 
echo -e "$domain,$ipaddress,$nameserver" >> outputfile 
done 
+0

你是不是给这个第一'sed'命令的任何输入数据上工作(尽管这看起来是为了成为评论的一部分)。同样,你不会在'while'循环中给''read'命令读取任何数据(通常通过'

+0

是的,你的确是正确的,那第一个'sed'是打算作为一个评论。呃,我需要在我的bash上工作 – amy

+0

'inputfile'应该是包含域的文件吗?因为'read'参数是将读取的数据分配给文件/ etc以读取数据的变量。默认情况下,'read'从标准输入中读取数据(所以'read line

回答

0

这将输出所有可能的A和给定文件域的NS记录:

#!/bin/bash 
while read domain 
do 

for a in `dig $domain a +short` 
do 
    ipaddress="$ipaddress$a," 
done 

for ns in `dig $domain ns +short` 
do 
    nameserver="$nameserver$ns," 
done 
echo "$domain,$ipaddress,$nameserver" 
done 

使用

假设脚本被命名为解析器和文件输入。做

cat input | ./resolver 

(某些领域有一个以上的IP地址和域名服务器)

+0

http://mywiki.wooledge.org/DontReadLinesWithFor –

+0

@EtanReisner关于用例的全部内容!在这里,使用for循环对于挖短输出是可以的 – madz

+0

您可能知道,但OP可能不会。用'for'来读取行是一种反模式,就我而言不应该使用。 –

相关问题