Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash-如果命令输出不为null,则将输出写入文件_Bash_If Statement - Fatal编程技术网

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

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语句,我用它来检查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
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方法的调用有一个名称。我想去看看关于那个的文件。。。真的很酷。