您好我正在使用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.
感谢任何帮助。
答案 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”是相同的。
最后检查变量中是否存在可以使用=~
函数的变量,它会检查左边是否存在正确的参数。
希望它有所帮助。