之间的区别是什么
[ -e /usr/local/nagios ] && echo yes
和
if [ -e /usr/local/nagios ]; then echo yes
fi
什么时候使用其中任何一种都是正确的?
我想说我想测试Nagios是从源代码编译还是通过yum安装(源代码的默认安装位置是/usr/local/nagios
和YUM
它是/etc/nagios
{{1}} 1}}) - 然后我将知道插件文件夹所在的位置,它将允许我将插件从Nagios服务器拉到Nagios客户端并将它们放在正确的目录中。
那么哪种方法最能实现这一目标呢?
提前致谢
答案 0 :(得分:2)
<强>选项1:强>
[ -e /usr/local/nagios ] && echo yes
在这里,您使用的是逻辑AND运算符(&amp;&amp;)。仅当第一个操作数返回true时,才会计算第二个操作数。首先将评估&#34; [-e / usr / local / nagios]&#34; 。 也就是说,检查/ usr / local / nagios是否存在。如果它不存在,则下一部分&#34;回显是&#34;不会被评估。因此,只有在/ usr / local / nagios存在时才会有效地&#34; echo yes&#34; ,因此将打印出yes。否则它不会。
<强>选项2:强>
if [ -e /usr/local/nagios ]
then
echo yes
fi
这只是做同样事情的另一种方式。在这里,我们检查/ usr / local / nagios是否存在。如果存在,则打印是。否则什么都不做。
尽管第一个选项看起来更聪明,考虑到可读性,我会选择选项2.个人选择我会说。
答案 1 :(得分:1)
[
通常是命令test
的另一个名称,只是期望]
作为最后一个参数。你实际上可以写两个命令:
test -e /usr/local/nagios && echo yes
和
if test -e /usr/local/nagios; then echo yes; fi
test
和[
是执行检查并返回0
或1
的juste shell命令,这就是为什么你可以像这样使用它{{1} }(或[ -e file ] && echo exists
)。
当编写一个几行的脚本时,我通常会发现test -e file && echo exists
的使用更清晰,更明确。
从你的另一个问题来看,依赖硬编码路径通常是一个坏主意(你可以从源安装到另一个目录,if
可能会在未来的某个地方或根据某些配置安装nagios。我建议您尝试查询yum
以查看是否安装了nagios(例如yum
或yum info nagios
)。然后,如果nagios没有安装yum,但二进制文件位于yum list installed | grep nagios
,您可以尝试使用PATH
,它将为您提供which nagios
二进制文件的完整路径。< / p>