首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Bourne shell中编写一个不那么复杂的if-else语句?

如何在Bourne shell中编写一个不那么复杂的if-else语句?
EN

Stack Overflow用户
提问于 2014-05-02 23:28:47
回答 1查看 479关注 0票数 1

我试图得到一个不太复杂的,如果-如果-其他的工作,我的FreeBSD盒,但我得到了错误的第二部分的条件。

基本上,这就是我想要做的

代码语言:javascript
复制
if not file-exists or (file-exists and string exists in file) then
 do this
else
 do something else 

这是我使用的实际代码

代码语言:javascript
复制
if [ ! -f /boot/loader.conf ] || [[ -f /boot/loader.conf ] && ! grep -Fqx "zfs_l
oad" /boot/loader.conf ]; then
                echo "found"
        else
                echo "not found"
fi

这给了我一个关于“[[]”的错误。我试着添加/去掉括号,但没有结果。

我也在网上搜索过类似的例子,但我看到的例子非常简单(也就是说,如果var=value那么做的话)

我可以把条件分成两个“如果”,但我认为它可以在1,我想知道“前进”,如果-如果-在伯恩以及其他。:)

任何帮助都将不胜感激。

谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 23:35:43

使用{ ... }进行分组,而不使用子subshell的开销和副作用(如( ... )创建的)。[[ ]]是一种不同的语法,只适用于ksh衍生工具,例如bash,它用一个不太容易出错的选项代替[ ... ];它在基线POSIX shell中不可用。

代码语言:javascript
复制
[ ! -f /boot/loader.conf ] || \
  { [ -f /boot/loader.conf ] && ! grep -Fqx "zfs_load" /boot/loader.conf; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23438449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档