bash - 如果命令输出不为空,则将输出写入文件
问题描述:
我觉得这应该非常非常容易......但不知何故,我无法弄清楚它。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
答
为什么不将其存储在一个变量,像这样:
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
谢谢,它肯定有效。我没有提到我在for循环中有这个if语句的事实,并且出于某种原因,我不认为直接在for循环中包含变量。我现在试了一下,完美无瑕! – Andy
很高兴帮助。注意,我在'echo'语句中添加了'>>',所以您将追加到输出文件,而不是每次循环都覆盖它。 – jkdba
您可以使用'echo“$ {RevLookup:-NXDOMAIN}”>>/root/IP'而不是'if'语句。 – chepner