在bash脚本中使用主机命令列出域名

问题描述:

嗨我正在研究一个shell脚本来接受来自文件的输入并使用for循环在每个IP上运行主机命令,如果它工作,它会打印出结果显示域名,但如果IP未找到,它应打印UNKNOWN。这是我迄今为止所拥有的。在bash脚本中使用主机命令列出域名

主机列表文件的样子:

72.247.244.88 
173.231.140.219 
65.55.72.135 
97.107.137.164 
69.171.224.11 
199.59.149.230 
174.121.194.34 

我当前的代码:

#! /bin/bash 
for ips in /opt/book/list/results/hostlist 

do 
    hostnames=$(host $ips) 
    if [[$hostnames == *"NXDOMAIN"*]] 
     then echo "UNKNOWN" 
    else echo $hostnames 
    fi 
done 

我想要的结果是什么样子:

230.149.59.xxx.in-addr.arpa domain name pointer www4.twitter.com. 
230.149.59.xxx.in-addr.arpa domain name pointer www4.example.com. 
UKNOWN 
UNKOWN 
230.149.59.xxx.in-addr.arpa domain name pointer www4.dummy.com. 

任何帮助表示赞赏。

你可以像这样的东西

#! /bin/bash 

while read ip; do 
    hostname=`host $ip` 
    if [ $? -eq 0 ]; then 
    echo $hostname 
    else 
    echo "UNKNOWN" 
    fi 
done < /opt/book/list/results/hostlist 

我想你寻找的东西像这样做:

#!/bin/bash 
for ips in `cat /opt/book/list/results/hostlist` 
do 
    hostname=$(eval host ${ips}) 

    if [[ "${hostname}" =~ "NXDOMAIN" ]] 
     then 
      echo "UNKNOWN" 
     else 
      echo ${hostname} 
    fi 
done 

遍历文件的内容你已经在一些读它方式,因此cat /opt/book/list/results/hostlist上的定义。

除此之外,如果将主机名var放在双引号内,还需要比较相同的事情,以便bash明白变量和文本“NXDOMAIN”是相同的。

最后要检查变量中是否存在字符串,您可以使用=~函数,它会检查左侧是否存在正确的参数。

希望它有帮助。