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

时间:2017-02-13 15:54:28

标签: bash shell scripting

您好我正在使用shell脚本从文件中获取输入并使用for循环在每个IP上运行主机命令,如果它有效,则打印出显示域名的结果但是未找到IP应该打印UNKNOWN。这是我到目前为止所做的。

主机列表文件如下所示:

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.

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以用这样的东西

来做
#! /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

答案 1 :(得分:0)

我猜你在寻找这样的东西:

#!/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

要迭代文件的内容,您必须以某种方式阅读它,因此for cat /opt/book/list/results/hostlist用于定义。

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

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

希望它有所帮助。