2016-03-04 195 views
0

我覺得這應該非常非常容易......但不知何故,我無法弄清楚它。bash - 如果命令輸出不爲空,則將輸出寫入文件

事情很簡單。我有以下if語句,我正在使用它來檢查IP並查看它們是否具有反向DNS。如果有可用的有效反向DNS,我將它寫入文件。如果不是,我寫「NXDOMAIN」到同一個文件。

if [[ $(dig +noall +answer -x 10.10.10.10 | grep -m 1 PTR | awk '{ print $5 }') ]]; then 
     dig +noall +answer -x 10.10.10.10 | grep -m 1 PTR | awk '{ print $5 }' > /root/IP 
else 
     echo "NXDOMAIN" > /root/IP 
fi 

這工作正常,但它運行命令兩次,不必要的。有沒有辦法,如果命令返回一個有效的反向DNS,我可以直接輸出到一個文件,而無需再次運行該命令?

所以,基本上,像這樣:

if [[ $(dig +noall +answer -x 10.10.10.10 | grep -m 1 PTR | awk '{ print $5 }') ]]; then 
     <write output of the above command in the "/root/IP" file> 
else 
     echo "NXDOMAIN" > /root/IP 
fi 

回答

4

爲什麼不將其存儲在一個變量,像這樣:

RevLookup="$(dig +noall +answer -x 10.10.10.10 | grep -m 1 PTR | awk '{ print $5 }')" 
if [[ "$RevLookup" ]]; then 
     echo "$RevLookup" >> /root/IP 
else 
     echo "NXDOMAIN" >> /root/IP 
fi 
+0

謝謝,它肯定有效。我沒有提到我在for循環中有這個if語句的事實,並且出於某種原因,我不認爲直接在for循環中包含變量。我現在試了一下,完美無瑕! – Andy

+0

很高興幫助。注意,我在'echo'語句中添加了'>>',所以您將追加到輸出文件,而不是每次循環都覆蓋它。 – jkdba

+1

您可以使用'echo「$ {RevLookup:-NXDOMAIN}」>>/root/IP'而不是'if'語句。 – chepner

1

把結果的變量。

REV_DNS=$(dig +noall +answer -x 10.10.10.10 | grep -m 1 PTR | awk '{ print $5 }') 
if [[ $REV_DNS ]] 
then 
    echo "$REV_DNS" > /root/IP 
else 
    echo "NXDOMAIN" > /root/IP 
fi 
+0

不要忘記在'if' – jkdba

+0

@JohnK分號分隔命令,所以做新線的分號。 – selalerer

+1

非常感謝您的信息! – jkdba