shell 脚本 : What's the difference between using test and if statement?

标签 shell testing 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[ 是执行检查并返回 01 的 juste shell 命令,这就是为什么你可以像这样使用它 [ -e file ] && echo exists(或 test -e file && echo exists)。

当编写几行长的脚本时,我通常会发现 if 的使用更清晰、更明确。

关于您的其他问题,依赖硬编码路径通常不是一个好主意(您可以从源代码安装到另一个目录,yum 可能会在将来或根据某些配置在其他地方安装 nagios ).我建议您尝试查询 yum 以查看它是否安装了 nagios(例如使用 yum info nagiosyum 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/

相关文章:

java - 有没有办法最小化 if 和 if-else 条件

string - Windows 命令行上引号周围的引号

bash使用bc计算,并对 float 进行四舍五入

android - uiatomator包smack不存在报错

python - Django:优化违反 DRY 的测试

javascript - 为什么这两段代码返回不同的值?

linux - 如何使用 curl 将文本文件打印到 jira api

c - C 语言 shell 、输入和管道

testing - 如何重用 puppeteer 测试

java - 如何查找一个数字是否在数组中?