Bash 条件语句

Bash 条件语句

bash 脚本中使用的条件语句有哪三种格式?

答案1

bash 手册的相关部分列出了 5 种可用于条件评估的不同构造。其中,ifcase[[ .. ]]构造可能是实际代码中最常用的,尽管该(( .. ))构造会在执行复杂计数或其他数值运算的脚本中频繁使用。

但他们没有提到 bash 中用于分支的另一种非常常见的形式,即仅结合短路评估来执行命令,例如

grep -q needle haystack.txt && echo "Needle located!" || echo "No dice or needles.";

&&and||是逻辑运算符:分别为“and”和“or”。

这实际上与

if grep -q needle haystack.txt; then echo "yea"; else echo "nay"; fi;

但工作方式不同:在第一种形式中,条件逻辑实际上是代码实际显式目标的副作用,至少表面上是评估逻辑运算符。这种构造在 C 和 JavaScript 代码中也很常见。

它通过采取捷径来工作:表达式的各个部分,例如x && y || z,从左到右进行计算。如果逻辑 and 的左侧(例如xin x && y)评估为 false,bash则不必费心评估该y部分,因为此时它已经知道这x && y是 false。

对于逻辑或而言,反之亦然:true || z无论 z 结果是什么,其计算结果始终为 true。

因此,如果grep结果为假,bash可以先跳过它echo,因为表达式的该部分不可能为真。所以它继续到第二个echo。另一方面,如果 grep 为真,则echo执行第一个(导致这些单词被回显......)。此时bash已完成,因为无论 右侧的值是什么||,表达式的结果仍然为 true。

要了解 bash 使用条件的方式,最好在命令行上进行一些实验。命令

echo $?;

将回响返回码之前的声明。这是一个错误代码,因此0表示 true,非零值表示 false。一开始有点混乱,但你就会习惯了。

所以你可以这样做,例如

$ (( 1 + 2 == 3 )); echo $?
0
$ (( 1 + 2 == 4 )); echo $?
1

并对构造进行类似的测试,[[ .. ]]以了解这些基本构建块。完成后,继续进行if陈述case

至于你问题的答案,我认为这很大程度上取决于所询问的上下文。但是,充分了解各种选项应该可以帮助你弄清楚他们在那里寻找什么。

相关内容