2017-02-13 99 views
0

嗨我正在研究一個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. 

任何幫助表示讚賞。

回答

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 
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 

遍歷文件的內容你已經在一些讀它方式,因此cat /opt/book/list/results/hostlist上的定義。

除此之外,如果將主機名var放在雙引號內,還需要比較相同的事情,以便bash明白變量和文本「NXDOMAIN」是相同的。

最後要檢查變量中是否存在字符串,您可以使用=~函數,它會檢查左側是否存在正確的參數。

希望它有幫助。