有什么区别
[ -e /usr/local/nagios ] && echo yes
和
if [ -e /usr/local/nagios ]; then echo yes
fi
什么时候使用它们是正确的?
假设我想测试 Nagios 是从源代码编译还是通过 yum 安装(源代码的默认安装位置是 /usr/local/nagios
并通过 YUM
它是 /etc/nagios
) - 然后我将知道插件文件夹所在的位置,它将允许我将插件从 Nagios 服务器拉到 Nagios 客户端并将它们放在正确的目录中。
那么哪种方法最能实现这一目标?
提前致谢
最佳答案
[
通常是命令 test
的另一个名称,只是期望 ]
作为最后一个参数。您实际上可以编写这两个命令:
test -e /usr/local/nagios && echo yes
和
if test -e /usr/local/nagios; then echo yes; fi
test
和 [
是执行检查并返回 0
或 1
的 juste shell 命令,这就是为什么你可以像这样使用它 [ -e file ] && echo exists
(或 test -e file && echo exists
)。
当编写几行长的脚本时,我通常会发现 if
的使用更清晰、更明确。
关于您的其他问题,依赖硬编码路径通常不是一个好主意(您可以从源代码安装到另一个目录,yum
可能会在将来或根据某些配置在其他地方安装 nagios ).我建议您尝试查询 yum
以查看它是否安装了 nagios(例如使用 yum info nagios
或 yum list installed | grep nagios
)。然后,如果 nagios 没有与 yum 一起安装,但二进制文件在你的 PATH
中,你可以尝试 which nagios
它将为你提供 的完整路径nagios
二进制文件。
关于 shell 脚本 : What's the difference between using test and if statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482912/