bash - 如果命令输出为非null,则将输出写入文件

时间:2016-03-04 15:03:35

标签: bash if-statement

我觉得这应该非常,非常,容易......但不知怎的,我无法弄明白。

事情很简单。我有以下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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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