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

时间:2014-05-02 23:28:47

标签: sh freebsd

我试图让一个不那么复杂的if-else在我的 FreeBSD框上工作但是我在第二部分情况下遇到错误。

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

if not file-exists or (file-exists and string exists in file) then
 do this
else
 do something else 

这是我使用

的实际代码
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则这样做)

我可以将条件分成2" ifs"但我认为它可以在1中完成,我想知道"提前"如果 - 其他也在伯恩。 :)

非常感谢任何帮助。

谢谢:)

1 个答案:

答案 0 :(得分:1)

使用{ ... }进行分组,没有子shell的开销和副作用(由( ... )创建)。 [[ ]]是一种不同的语法,仅在ksh派生词中可用,例如bash,它将[ ... ]替换为容易出错的替代词;它在基准POSIX shell中不可用。

[ ! -f /boot/loader.conf ] || \
  { [ -f /boot/loader.conf ] && ! grep -Fqx "zfs_load" /boot/loader.conf; }