Ita*_*not 3 testing shell if-statement
有什么区别
[ -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和[只是执行检查并返回0or 的shell 命令1,这就是为什么您可以像这样使用它[ -e file ] && echo exists(or test -e file && echo exists)。
当编写几行长的脚本时,我通常会发现使用if更清晰、更明确。
至于您的其他问题,依赖硬编码路径通常是一个坏主意(您可以从源安装到另一个目录,并且yum将来可能会在其他地方安装 nagios 或取决于某些配置)。我建议您尝试查询yum是否安装了 nagios(使用yum info nagios或yum list installed | grep nagios例如)。然后,如果 nagios 不是随 yum 安装的,但二进制文件在您的 中PATH,您可以尝试which nagios这将为您提供二进制文件的完整路径nagios。
| 归档时间: | 
 | 
| 查看次数: | 10277 次 | 
| 最近记录: |