在本指南中,我们将通过示例了解 Bash 脚本中条件语句的用法。 决策是编程中的一个重要步骤。 可能存在必须满足某些条件并基于此您必须编写一些逻辑的情况。 这就是条件语句的作用。 条件语句允许您编写逻辑并做出决定。 您在此处阅读的概念对于所有编程语言都是相同的,但语法和实现有所不同。
条件语句语法
条件语句的构建块 bash 如下。
if [[ conditions ]] then code elif [[ conditions ]] then code else code fi
代码说明:
- 关键词
"if"
和"fi"
标记条件语句的开始和结束。 每个 if 语句后面都应该跟"then"
关键词。 - 任何一个
[[ ]]
或者[ ]
应该用于评估条件。 如果条件被评估为 “真的”,然后将执行一段代码。 - 条件语句可以有一个 if 条件和多个
elif
条件。 如果某个条件被评估为真,则所有后续条件语句都将被跳过。 - 如果所有的
if
或者elif
块被评估为 错误的 然后是代码块"else"
子句将运行。 - 虽然没有严格的缩进规则,但为代码块留出 2 个空格,这样可以提高可读性。
评估条件 bash 有一个名为的内置命令 "test"
. 方括号与测试命令相同,因此您可以使用测试命令或方括号。
$ type -a test test is a shell builtin test is /usr/bin/test test is /bin/test
有一堆运营商支持 test
命令来评估条件,我们将在接下来的部分中看到如何使用这些运算符。 要获取运算符列表,您可以运行以下任一命令。
$ man test
$ help test
文件测试运算符
文件测试 运营商 可用于处理文件或目录对象。 使用文件测试运算符,您可以验证给定文件或目录是否存在,给定对象是文件或目录,您正在处理的文件类型,文件大小等。运行以下命令并注意文件操作符部分。
$ man test
并非所有运算符都经常使用,但我将引导您了解最重要的运算符。
要检查给定文件是否存在,请使用 -e
旗帜。 在这里,我正在检查是否 .bashrc
文件是否存在于我的主目录中。
if [[ -e /home/${USER}/.bashrc ]] then echo "File is present" else echo "File is not present" fi
要检查给定目录是否存在,请使用 -d
旗帜。 在这里,我正在检查 桌面 我的主文件夹中的目录。
if [[ -d ~/Desktop/ ]] then echo "Directory is present" else echo "Directory is not present" fi

检查文件是否为 非零大小 文件,使用 -s
旗帜。 在这里,我创建了一个名为 "zero_byte.txt"
并附加了一些文字。
$ touch ~/Desktop/zero_byte.txt
$ echo "Writing something" >> ~/Desktop/zero_byte.txt
$ if [[ -s ~/Desktop/zero_byte.txt ]] then echo "File is not zero byte" else echo "File is zero byte" fi

您可以使用 !
带有任何标志的符号将反转结果。 我正在使用相同的 example 如上所述,但有 "!"
象征。 它会将文件反转并打印为零字节文件,即使它不是。
$ if [[ ! -s ~/Desktop/zero_byte.txt ]] then echo "File is not zero byte" else echo "File is zero byte" fi

整数比较运算符
下面是整数比较运算符,它们将针对两个给定的整数进行评估。
-eq => Integer X is equal to Integer Y -ne => Integer X is not equal to Integer Y -gt => Integer X is greater than Integer Y -ge => Integer X is greater than or equal to Integer Y -lt => Integer X is lesser than Integer Y -le => Integer X is lesser than or equal to Integer Y
每一个 bash 命令返回之间的退出代码 0-255 我们将使用整数比较运算符来评估退出代码。 在下面 example,我正在分配的退出代码 非虚拟机 命令到一个名为的变量 EXCODE 并进行整数比较。 由于 neovim 不可用,它会抛出 退出代码 127 (命令未找到错误)。
$ EXCODE=$(nvim;echo $?)
$ if [[ $EXCODE -eq 0 ]] then echo "nvim is available to use" elif [[ $EXCODE -eq 127 ]] then echo "Command not found, check if nvim is installed or not" else echo "Return code is other than 0 & 127. Check and fix the error" fi

在上述 example我用过 elif
声明为本文中的第一个声明。 首先是 "if"
评估条件以检查返回代码是否为零,返回 false,然后将控制权传递给 elif
语句和条件被评估为真并运行代码块。 你可以添加尽可能多 elif
语句来评估不同的条件。
您还可以一次评估多个条件 if
或者 elif
使用逻辑 AND、OR 运算符的语句。
LOGICAL AND ⇒ && symbol => All the conditions should be evaluated to be true.
LOGICAL OR ⇒ || symbol => Anyone condition should be evaluated to be true.
下面是一个 example 对于一个合乎逻辑的 和 将整数存储在变量中的运算符 X 和 是 被评估为 真的.
$ X=10
$ Y=15
$ if [[ $X -eq 10 && $Y -eq 15 ]] then echo "ok to proceed" else echo "Not ok to proceed" fi

下面是 example 对于一个合乎逻辑的 或者 运算符 where 变量 X 被评估为 真的 和变量 是 被评估为 错误的.
$ X=10
$ Y=15
$ if [[ $X -eq 10 || $Y -eq 10 ]] then echo "ok to proceed" else echo "Not ok to proceed" fi

紧凑的条件语句
如果你只需要写一个 if
和 else
语句,那么您可以使用速记方式。 简而言之,没有必要使用 if..then..else..fi
关键字。 您可以使用逻辑 AND (&&
) 和逻辑或 (||
) 运算符。
[[ condition ]] && << run if condition is evaluated to true >> || << run if condition is evaluated to false >>
看看下面 example. 我正在尝试检查包裹 新取 可用,如果不可用,请尝试安装它。
$ which neofetch && echo "Neofetch already installed" || sudo apt install neofetch -y

代码说明:
- 它将运行
"which neofetch"
命令,如果返回码为零,那么后面的任何内容&&
运营商将运行。 - 如果返回码大于零(评估为假),则后面的任何内容
||
运营商将运行。 - 这类似于
if
和else
陈述。 这"If"
只有当条件被评估为真时,语句才会运行。 在这种情况下,它是 和 操作员。 类似地,else 子句仅在以下情况下运行"if"
条件被评估为假。 在这种情况下,它是 或者 操作员。 - 在我的机器中已经安装了 neofetch,因此退出代码将为零。 它将运行
echo
命令。 如果没有安装 neofetch,它将运行apt install
命令。
下面是另一个 example 我正在使用文件测试运算符来检查文件是否为零字节。
$ [[ -s ~/.bashrc ]] && echo "Not a empty file" || echo "Empty file"

字符串比较运算符
像 整数 和 文件 测试操作符,我们有一组操作符来处理字符串。 下面是一组重要的字符串运算符。
-z => Check if string is NULL. -n => Check if string is not NULL. == => Check for string equality. != => Check for string inequality.
要检查字符串是否为 NULL,请使用 -z
和 -n
旗帜。 我正在使用紧凑的条件语句语法来评估条件。
$ [[ -z "Howdy" ]] && echo "String is NULL" || echo "String is not NULL"
$ [[ -n "Howdy" ]] && echo "String is not NULL" || echo "String is NULL"

要检查两个字符串是否相等,请使用 ==
操作员。 字符串区分大小写,因此您必须牢记这一点来运行比较。
$ X="Linux"
$ Y="Linux"
$ [[ $X == $Y ]] && echo "Equal" || echo "Not equal"

要检查两个字符串是否不相等,请使用 !=
操作员。
$ [[ $X != $Y ]] && echo "Not Equal" || echo "Equal"

结论
在本文中,我们了解了如何使用条件语句 bash. 我们还看到了如何使用文件测试、整数和字符串运算符。 最后,我们通过示例讨论了如何使用逻辑 AND 和逻辑 OR 运算符编写紧凑的条件语句。
对于任何反馈或建议,请使用评论部分,我们很乐意回复。