在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”是相同的。
最后要检查变量中是否存在字符串,您可以使用=~
函数,它会检查左侧是否存在正确的参数。
希望它有帮助。