优雅的Bash条件

2021-03-03 00:52:47

if语句是非常基本的东西,不仅在bash中,而且在所有编程中。我看到它们在shell脚本中使用了很多,尽管在很多情况下,它们可以用更优雅的替换。

在这篇简短的文章中,我将展示如何代替使用控制运算符。许多人可能对此有所了解,但并没有意识到如何很好地使用它们,这将有助于您将来编写更简洁的Shell脚本。

Bash为控制操作员提供了构建命令序列的方法,其中一些是有条件的,并允许根据上次运行命令的成功状态进行逻辑分支。

您可能想知道bash如何考虑命令是否成功,这是退出代码的所在。当程序存在时,返回数字状态代码。值0表示程序成功,其他任何值表示程序失败。

退出代码通常是隐藏的。上次运行命令的状态存储在?中。变量。您可以通过调用以下内容进行检查:

例如,以ls列出通常会返回0,但是如果目录不存在或发生错误,则此值会有所不同。

仅当可读性检查表达式为真/成功时,我们才想获取文件,因此我们使用&&操作员。

echo命令始终以0存在,因此如果第一个表达式为真,则此命令传播到退出位置。

如果我们希望打印带有成功消息的配置文件文件内容,或者在读取失败时出现错误消息,我们可以执行以下操作:

您可以根据需要设置这些命令序列。对于构建需要执行一系列步骤的安装脚本很有用。您可以为每个步骤定义bash函数,并按以下方式安排安装:

[(通常在if语句中使用)不仅仅是shell功能。它是类Unix系统上的二进制文件,通常位于/ usr / bin / [,因此可以在任何地方使用。它返回如果表达式是真实的,则退出代码0。

您可以链接多个[expr]&& [expr]表达式在一起,它们毕竟是命令。

Bash具有参数表达式。您可以使用$ {EDITOR:= nvim}将EDITOR变量设置为nvim(仅当它为空时),因此您甚至不需要条件。

大多数其他外壳程序都支持类似的运算符。鱼类用途;和和;或,但现在支持&&和||以及现代版本。

这些带有控制操作符的命令序列是简单的if语句的绝佳替代方案。 我认为它们看起来更好,并且在条件逻辑方面更具表现力。 但是,不要过度使用它们。 对于更大的语句或高级分支,您应该回到if语句。 我希望本文能激发您通过使用这些运算符使Shell脚本在将来更加优雅。