bash-如果命令输出不为null,则将输出写入文件
我觉得这应该是非常非常简单的。。。但不知怎的,我搞不懂 事情很简单。我有下面的if语句,我用它来检查ip,看看它们是否有反向DNS。如果有一个有效的反向DNS可用,我将其写入一个文件。如果不是,我将“NXDOMAIN”写入同一个文件bash-如果命令输出不为null,则将输出写入文件,bash,if-statement,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 | g
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
if[$(dig+noall+answer-x10.10.10 | grep-m1ptr | awk'{print$5}')];然后
其他的
echo“NXDOMAIN”>/root/IP
fi
将结果放入变量中
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
将结果放入变量中
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
为什么不将其存储在这样的变量中:
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
为什么不将其存储在这样的变量中:
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循环中包含变量。我现在试过了,效果完美无瑕!我很乐意帮忙。注意:我确实在您的
echo
语句中添加了>
,这样您就可以在每次循环时追加到输出文件,而不是覆盖它。您可以使用echo“${RevLookup:-NXDOMAIN}”>/root/IP
而不是if
语句。谢谢@JohnK。我知道,实际上我在实际脚本中使用了>
。这只是一个简单的例子:)@chepner,是的,的确,谢谢你的建议@chepner方法的调用有一个名称。我想去看看关于那个的文件。。。真的很酷。谢谢,它确实有效。我没有提到我在for循环中有这个if语句,出于某种原因,我不认为直接在for循环中包含变量。我现在试过了,效果完美无瑕!我很乐意帮忙。注意:我确实在您的echo
语句中添加了>
,这样您就可以在每次循环时追加到输出文件,而不是覆盖它。您可以使用echo“${RevLookup:-NXDOMAIN}”>/root/IP
而不是if
语句。谢谢@JohnK。我知道,实际上我在实际脚本中使用了>
。这只是一个简单的例子:)@chepner,是的,的确,谢谢你的建议@chepner方法的调用有一个名称。我想去看看关于那个的文件。。。真的很酷。