50% off 所有套餐限时优惠,起价 $2.48/mo
10 min left
Servers & OS

Bash If 语句:语法、变体、用例、命令等

Pius Bodenmann By Pius Bodenmann 10 min read Updated Jan 28, 2024
bash scripting

在 shell 脚本中,Bash if 语句通过根据不同情况创建条件执行路径发挥关键作用。基本上,if 语句让我们能够在 Bash 脚本内做出决策,考虑测试结果、用户输入或系统状态等因素。这就像一种在不同可能性之间导航的方式。

使用 Bash 脚本时,if 语句遵循特定的结构。它通常以 "if" 关键字开头,随后是需要评估的条件、"then" 关键字,以及条件为真时要执行的一个或多个命令。

为了更加灵活,if 语句也可以包含一个可选的 "elif"(else if)语句,当初始条件为假时起作用。它允许我们测试额外的条件并相应进行。此外,if 语句还可以有一个可选的 "else" 语句,在所有条件都不成立时执行。

通过将 if 语句与其他 Bash 命令和 shell 脚本特性相结合,程序员可以编写高级脚本来自动化复杂的任务和流程。继续阅读以深入了解 Bash if 语句,包括其语法、用例和示例。

Bash If 语句语法

Bash 语法是指在 Bash shell 语言中编写命令和脚本的结构与规则。Bash 语法包括多种构造和元素,例如:

  • Commands:这些是用来执行特定任务的独立可执行程序或 shell 内置命令。在 Bash 编程中,你会花大量时间与这些命令打交道。
  • Arguments:这些是传递给命令的值,用来指定选项、参数或输入数据。可以把它们理解为为命令设定的条件,用来指定命令的执行参数。
  • Variables变量是用来代表可以被赋值、操纵或在表达式中使用的值的符号。它们通常用来确定命令和参数需要处理的值。
  • Redirection:这是将输入、输出或错误重定向到文件、设备或其他命令的过程。如果没有正确配置重定向,你的命令很容易指向错误的目标,导致代码出现问题。
  • Pipes:这是一种将一个命令的输出连接到另一个命令输入的机制。它通常用于在大型程序中执行复杂的条件命令行,以及创建相互关联的命令行。
  • Control structures:这些是控制命令执行流程的构造,包括循环、条件判断和函数。理解控制结构是编写复杂命令行的关键,也让你的代码更上一个台阶。
  • Comments:这些是shell忽略的注解,用于记录代码或提供说明。在执行分析和调试时,特别是在团队项目中,它们是重要的参考依据。

Bash 语法必须正确编写,shell 才能正确解析和执行命令。语法错误会导致 shell 产生错误信息或出现异常行为。

下面是 Bash if 语句的实际应用:

if condition
then
   command1
   command2
   ...
   commandN
elif condition2
then
   commandA
   commandB
   ...
   commandC
else
   commandX
   commandY
   ...
   commandZ
fi

In the case we have here, the “condition” refers to a test that produces a result of either true or false. When the condition is true, the subsequent commands specified after the “then” keyword are executed. Now, let’s say we want to evaluate an additional condition instead. We can use the “elif” keyword to do this. It provides a way to consider another possibility. Now, if none of the conditions hold true, the commands specified after the “else” keyword come into play. It’s like a fallback plan. Lastly, to indicate the conclusion of the if statement, we use the “if” keyword.

Bash 语句如何工作?

在 Bash 脚本中,if 语句根据条件测试的结果来控制脚本流程,非常实用。它的作用是判断条件是否为真,如果为真,就执行指定的命令集。

现在,我们来看看当 if 语句在 Bash 脚本中使用时通常会发生什么。脚本会评估 if 语句中的条件。如果条件为真,"then" 代码块中的命令就会执行。

不过,如果条件为假,脚本会继续判断其他 elif 条件。只要其中任何一个条件为真,对应 elif 块中的命令就会执行。当 if 和 elif 语句中的所有条件都为假时,脚本会执行 else 块中的命令(前提是你包含了 else 块)。

if 语句的作用是让脚本根据测试结果执行不同的代码分支。测试可以基于多种条件,比如一个命令是否成功执行,或者某个变量的值。

Bash If 语句示例

现在我们跳过基础理论,看看 Bash if 语句在实际编码开发中如何使用。下面是一个演示 Bash if 语句工作原理的例子:

#!/bin/bash
# set a variable
x=5
# evaluate the variable
if [ $x -gt 4 ]
then
  echo "x is greater than 4."
else
  echo "x is less than or equal to 4."
fi

在这个例子中,if 语句计算变量 x 的值。如果 x 大于 4,脚本执行打印 "x is greater than 4" 的命令。如果 x 小于或等于 4,脚本执行打印 "x is less than or equal to 4" 的命令。

现在你已经理解了基础的 Bash If 语句及其工作原理,接下来我们深入探讨它的各种用法和相关命令。我们将逐个学习基本 If 语句、嵌套 If 语句、Bash If Else、If Elif Else 以及 Case 语句。

Basic If Statements

首先来看基本的 Bash if 语句。Bash 中的 if 语句检查条件是否成立,然后相应地执行相关代码块。语法如下:

if [ condition ]
then
  commands
fi

在这个例子中,脚本会先计算条件是否成立。如果成立,就执行指定的命令。如果条件不成立,脚本会跳过 "then" 部分的代码块,继续执行后续命令。

Nested If Statements

嵌套 if 语句,顾名思义,就是在一个 if 语句内部放置另一个 if 语句。这种嵌套结构让你可以在脚本中执行更复杂的测试和分析。下面是一个嵌套 if 语句的例子:

if [ condition1 ]
then
  if [ condition2 ]
  then
    commands
  fi
fi

从命令中可以看出,脚本首先会评估 condition1。如果 condition1 为真,接下来评估 condition2。如果 condition2 也为真,脚本就会执行所需的命令。

Bash If Else 语句

Bash if else 语句让你能在脚本中根据条件的真假做出判断,从而执行更复杂的条件代码。下面是语句的结构:

if [ condition ]
then
  commands1
else
  commands2
fi

这个结构确保当条件成立时,你的脚本会快速执行 "commands1"。如果条件不成立,则转而执行 "commands2"。

If Elif Else 语句

有时,你需要根据多个条件及其相应的结果来做出判断。if elif else 语句正是为此而设计的。请看下面的语法示例:

if [ condition1 ]
then
  commands1
elif [ condition2 ]
then
  commands2
else
  commands3
fi

脚本会先判断 condition1。如果 condition1 为真,会立即执行 commands1。如果 condition1 为假,脚本继续判断 condition2。当 condition2 为真时,执行 commands2。如果 condition1 和 condition2 都为假,脚本会执行备选方案 commands3。

Case Statements

在 Bash 中,case 语句的作用类似于其他编程语言中的 switch 语句。它能根据变量的值执行不同的命令集。来看一下它的结构:

case expression in
  pattern1)
    commands1;;
  pattern2)
    commands2;;
  pattern3)
    commands3;;
*)
default commands;;
esac

脚本在此处计算表达式变量,并将其与各种模式进行匹配。找到匹配项时,执行相应的命令集。如果没有找到匹配项,则执行默认命令。星号(*)模式充当通配符,匹配任何未被覆盖的情况。

Bash 逻辑运算符

Bash if 语句的另一个重要部分是逻辑运算符。这些运算符让你组合多个条件,根据这些组合条件的真假来做出决策。Bash 提供了三个主要的逻辑运算符用于 if 语句。以下是这三种主要逻辑运算符的示例。

  • Bash AND (&&):
if [ $age -ge 18 ] && [ "$citizen" == "yes" ]; then
  echo "You meet the criteria for voting."
fi
  • Logical or (II):
if [ "$status" == "active" ] || [ "$role" == "admin" ]; then
  echo "Access granted."
fi
  • Not Equal to:
if(( ! $a == "true" )) then 
  echo "a" was initially false. 
else
  echo "a" was initially true. 
fi

Conclusion

在这篇博文中,我们介绍了 Bash if 语句的基础用法。我们还讨论了如何用它们来简化代码、提高代码的可读性和功能性。通过有效使用这些条件语句,你可以编写强大的脚本来处理复杂的任务和逻辑判断。

刚接触 Linux 吗?让我们来引领你踏上这段精彩之旅!我们的 Linux VPS 是完美的入门选择,既简单易用又不失强大功能。凭借友好的界面和专业的支持,你可以轻松驾驭 Linux 服务器的全部能力。无论是搭建网站、测试应用,还是探索 Linux 的广阔世界,我们的 Linux VPS 都为你提供安全无忧的环境。自信地迈入 Linux 的世界吧,立即查看我们的 Linux VPS 方案,开启你的 Linux 之旅。

Linux VPS 托管

选择经济版或高级 Linux VPS 来托管网站或远程桌面,价格最低。VPS 运行在 Linux KVM 上,效率更高,采用强大硬件和 NVMe SSD 存储,速度更快。

Read More

FAQ

我能在 Bash 的 if 语句中使用逻辑运算符吗?

是的,您可以使用逻辑运算符,例如 ‘&’ and ‘||’ 在 Bash if 语句中。例如 if [ $var -gt 0 ] && [ $var -lt 10 ]; then … 在以下情况下执行代码块 $var 大于 0 且小于 10。

我可以在一个 if 语句中使用多个条件吗?

是的,你可以在 Bash 的 if 语句中使用逻辑运算符来检查多个条件,例如 -a (AND) or -o (或)将它们组合在一起。例如, if [ $var -gt 0 -a $var -lt 10 ]; then … 在以下情况下执行代码块 $var 大于 0 且小于 10。

我可以在 Bash if 语句中使用命令替换吗?

可以,在 Bash if 语句中使用命令替换,只需将命令放在 $() or backticks (). For example, if [ $(whoami) == "root" ]; then … 如果当前用户是 root,将执行这个代码块。

[[ vs [ vs ( vs ((:这些 Bash 运算符之间有什么区别?

简单来说,[[ 用于高级条件测试。[ 用于基础条件测试。( 用于子shell分组和命令执行。(( 用于算术运算。

 

Share

博客更新

Keep reading.

可与 Cosmos Cloud 运行的最佳自托管应用,封面显示 Cosmos 仪表板周围的应用面板。
Servers & OS

可与 Cosmos Cloud 运行的最佳自托管应用:文件、媒体、密码、自动化等!

Maybe 你已设置 Cosmos Cloud,现在想了解哪些应用能很好地配合使用,或者你甚至还没决定选择 Cosmos,只是想看看它如何融入你的工作流

Nick SilverNick Silver 16 min read
Portainer 对比 Cosmos Cloud 管理 Docker 应用,封面显示混合部署图以及 neon 操作对比访问块。
Servers & OS

Portainer 对比 Cosmos Cloud:Docker 应用管理的最佳选择

如果你已了解 Docker,只是想找到更清晰的方式运行不断增长的应用栈,这是 Portainer 对比 Cosmos Cloud 的简短答案。Portainer 是更强劲的选择,用于直接

Nick SilverNick Silver 14 min read
Cosmos Cloud 对比 CasaOS 对比 Umbrel 功能图,显示一个抽象云网络世界内的三条自托管路径。
Servers & OS

Cosmos Cloud 对比 CasaOS 对比 Umbrel:哪个自托管平台适合你?

简短答案是 CasaOS 仍是最容易入门的选择,Umbrel 拥有最简洁的精选风格,Cosmos Cloud 在你需要更严格控制域名时更有意义

Nick SilverNick Silver 11 min read

Ready to deploy? From $2.48/mo.

独立云服务,始于2008年。AMD EPYC、NVMe,40 Gbps。14天退款保障。