Bash Shell 中的条件表达式
Bash 作为一种编程语言并不是大多数程序员的首选,尤其是对于 Python 和 C 等更常见的语言。
编写编程结构以使用 if 语句根据条件执行命令或使用 for
循环具有多个参数的同一命令会很有帮助。
本教程将介绍 Bash 中的 if 语句,重点介绍 if 语句中使用的各种条件表达式。
Bash 中的 if
语句
Bash 中 if
语句的一般语法如下。
if condition; then
do-if-true;
elif second-condition; then
do-else-if-true
elif third-condition; then
do-else-if-third-true
else
do-else-false
fi
条件本身可以有不同的语法,具体取决于所需的条件。
-
如果你想使用命令的输出作为条件,例如
grep
文件的内容以查看它是否包含某个子字符串,你可以将命令放在 if 关键字之后,如下所示。
if greq -q "string" file.txt; then
echo "string exists in file.txt."
else
echo "string does not exist in file.txt."
fi
-
[ "$s" = "string" ]
检查变量$s
是否包含值string
。它也等价于test "$s" = "string"
,其中test
有效地替换了方括号。
if [ "$s" = "string" ]; then
echo "string is equivalent to \$s"
else
echo "string is not equivalent to \$s"
fi
-
你甚至可以执行算术运算,例如检查文件中的预期文件数或行数是否确定,或者一个目录中的数量是否小于或大于另一个目录的数量。
我们用一对括号来做到这一点。
a=$(ls dir_a | wc -l)
b=$(ls dir_b | wc -l)
if (( a < b )); then
echo "Directory a has fewer files than directory b."
elif (( a > b )); then
echo "Directory a has more files than directory b."
else
echo "Directory a has the same number of files as that of directory b."
fi
内置 Bash 条件
有时,运行一个单独的程序来检查像文件存在、修改日期和大小这样简单的事情是乏味且耗费资源的,因此 Bash 可以像 if 语句一样直接检查这些属性。
以下标志检查这些属性的存在或不存在,将有效的真或假结果返回给 if 语句。
例如,要检查命令是否没有输出,我们可以将其输出视为字符串,并使用 -z
标志检查该字符串的长度是否为零,如下所示。
out=$(bash print-if-error.sh)
if [[ -z $out ]]; then
echo "The script ran successfully."
else
echo "The script produced the following errors: "
echo $out
fi
要获得条件的倒数,你可以使用!
NOT 运算符,或使用此标志的相反形式,即 -n
,或根本没有标志,因为非空字符串在 Bash if 语句中可以表现为真
。
out=$(bash print-if-error.sh)
if [[ $out ]]; then
echo "The script produced the following errors: "
echo $out
else
echo "The script ran successfully."
fi
下面解释了一些其他有用的标志,解释参考了 GNU Bash 参考手册。
对于带有两个参数的标志,例如比较运算符,第一个参数出现在标志之前,而第二个参数出现在标志之后。
假设我们比较两个文件 - a.txt 和 b.txt - 看看哪个更新,带有 -nt
标志。反过来将检查它是否更旧,使用 -ot
。
out=$(bash print-if-error.sh)
if [[ a.txt -nt b.txt ]]; then
echo "a.txt is newer than b.txt."
else
echo "a.txt is older or the same age as b.txt."
fi
其他这样的二操作数标志如下。
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:108 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Bash 中创建进度条
发布时间:2023/05/04 浏览次数:164 分类:操作系统
-
这是有关在 Bash 中创建进度条以显示正在运行的命令或进程的进度的指南。本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。使用 pv 命令在 Bash 中创建进度条