迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Bash 双管道

作者:迹忆客 最近更新:2023/05/19 浏览次数:

本文对管道和双管道进行了充分的探讨。 它将讨论管道在 Bash 命令脚本中的用法、符号和影响。

在现实生活中,管道将流体或气体从一个地方输送到另一个地方。 但在 Bash 中,管道不承载流体,而是将一个命令的输出作为下一个命令的输入传递。


Bash 中的管道

管道是一种重定向运算符,它将命令的输出传输到紧跟其后的命令的输入。 | 符号在 Bash 中用作管道。

我们也可以说,在 Linux/UNIX 系统中,管道将一个命令的标准输出连接到另一个命令的标准输入。

管道还用于组合两个或多个命令,其中前一个命令的输出成为后一个命令的输入。 这个东西消除了文件使用的开销。

通常,当我们要从文件中提取一些相关信息时,我们首先将之前的输出保存到文件中,然后从文件中读取,将文件流转换为需要的输出。

但是,在管道中,一个命令的输出直接作为输入提供给另一个命令。 下面显示了命令的基本符号。

Comand-1 | command-2 | .... | command-N

在 ls 和 grep 之间添加管道

现在我们将看到管道将一个命令的输出连接到下一个命令的输入的示例。 在此示例中,我们将从给定目录中的一堆文件中按名称选择所需的文件。

只需打开终端并转到您放置文件的目录,然后在其上写入 ls 命令。 ls -l 命令将列出所选目录文件的详细信息。

然而,我们的目标是选择 ls -l 的输出,添加一个管道,并搜索特定的文件名,以便输出可能只包含所需的文件。

按照代码,首先列出给定目录中所有文件的名称。

ls -l

ls 命令的输出

当前目录下有三个文件; 他们的详细信息显示在屏幕截图中。 但是,我们对 bash_double_pipe.md 文件的详细信息感兴趣。

我们将使用管道和 grep 该文件及其名称。

以下代码将显示 bash_double_pipe.md 的详细信息。

ls -l | grep "bash_double_pipe.md"

ls 与管道命令

避免使用管道进行 I\O 重定向

管道在重定向期间不使用标准输入或输出。 管道在主存中实现。

以下示例将显示使用和不使用管道的流重定向。

没有管道的 I\O 重定向

ls -l > temp

more < temp

上面给出的代码将 ls -l 的输出重定向到临时文件,然后在屏幕上显示临时文件的内容。 以下屏幕截图显示了上述运行代码的输出。

io重定向

现在,我们将探索不使用管道的标准输入或输出的 IO 重定向。 上面的示例将第一个命令的输出重定向到第二个命令的输入。

以下代码提供相同的 IO 重定向操作,但使用管道。

ls -l | more

上面的代码将在没有磁盘 IO 的情况下执行相同的重定向操作。 以下屏幕截图显示了上述运行命令的结果。

使用 bash 进行 io 重定向

上面的截图显示我们可以在没有磁盘 IO 的情况下使用管道进行重定向。

在 cat、grep、tee 和 wc 命令上使用管道

管道在 catgrepteewc 命令中也非常有用。 假设我们想查看一条记录在文件中出现了多少次。

然后,我们不需要创建许多变量,而是需要在这些命令之间使用管道并获得所需的输出。

以下代码显示了 cat、grep、tee 和 wc 命令以及管道的用法。

cat abc.txt | grep "temp" | tee file2.txt | wc -l

cat 命令将 abc.txt 的所有内容传递给 grep 命令。 grep 命令仅选择具有与 temp 匹配的字符串的行。

然后将包含临时字符串的行传递给 tee 命令,该命令将输出写入 file2.txt。

之后,这个输出被传递给 wc 命令,它计算其中的记录数。 file2.txt 有三行; 上述命令的输出是 3。

cat grep pipe

总结这篇文章,管道对于将一个命令的输出传输到下一个命令的输入非常有用。


单管道和双管道的区别

单管 | 将一个命令的输出发送到下一个命令的输入,但双管道 || 与单管道不同。 双竖线表示 OR 运算符,一般用在条件语句中。

OR 运算符的语法和短路评估

下面的代码显示了双管道的基本符号。

command-1 || command-2

上面的代码显示了 || 的基本符号和用法 操作员。 Bash 支持短路评估。

短路评估意味着条件的评估在变得明确后立即停止并返回最终决定。 例如,具有多个表达式与 OR 运算符组合的复合条件将在其中一个表达式结果为真时立即停止。

它不会进一步评估其他表达式,因为它们的结果不会再影响最终决定。

因此,Bash 解释器会尝试执行上面 Bash 脚本中的第一条命令。 如果第一个命令执行成功,则 command-2 将不会执行。

仅当第一个命令未成功执行时,第二个命令才会执行。

让我们探讨一下双管道的例子。

ls -a || echo "hello world"

在上面的脚本中,在 command-1 中,我们列出了当前目录的元素。 在 command-2 中,我们打印消息 hello world。

我们在这两个命令之间使用了双管道。 当我们运行上面的命令时,command-1 成功列出了当前目录的元素,因此,command-2 被忽略了。

现在让我们探讨一下 command-1 没有成功执行的场景。

ls a || echo "hello world"

上面的命令显示了执行第二个命令的场景。 在第一个命令中,我们没有在 a 标志前使用连字符 (-); 因此,该命令将不会成功运行。

因此,OR 运算符将执行 echo 命令,打印 hello world 消息。

以下屏幕截图显示了上述两个命令的输出。

双管道

上面的想法可以扩展到链接任意数量的命令。 例如,以下脚本将使用 || 链接四个命令 运算符,评估将从左到右开始。

一旦任何命令成功执行,右侧的所有剩余命令都将被跳过。

Command-1 || Command-2 || Command-3 || command-4

总结

本文讨论了单管和双管标志及其功能。 单管道符号代表 Linux 管道,它将一个命令的输出放入另一个命令的输入。

另一方面,双竖线符号是逻辑或运算符,有助于逻辑运算。

上一篇:检查 Bash 中是否存在命令

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

检查 Bash 中是否存在命令

发布时间:2023/05/20 浏览次数:77 分类:操作系统

我们可以在 Bash 中使用不同的内置命令来检查命令是否存在。 下面演示了这些命令的使用。使用命令 -v 命令检查 Bash 中是否存在命令 命令 -v 是所有 POSIX 系统和 Bash 中的内置函数。

在 Linux 中添加新用户的 Bash 脚本

发布时间:2023/05/20 浏览次数:54 分类:操作系统

这篇简短的文章是关于创建一个 Bash 脚本,该脚本可以自动为 Linux 操作系统添加用户和分配密码。 在 Linux 操作系统中,useradd 命令用于添加新用户并为他们提供密码。Bash 脚本 useradd 命令

在 Bash 中获取当前日期和时间

发布时间:2023/05/20 浏览次数:197 分类:操作系统

本文讨论在 Bash Scripting 中以某种指定格式显示当前日期和时间的方法。 为此,date 命令与多个选项一起使用。在 Bash 中使用日期命令

批处理脚本中的 For 循环

发布时间:2023/05/19 浏览次数:103 分类:操作系统

本篇文章将介绍如何在批处理脚本中使用 FOR 循环。循环用于连续执行特定任务,直到达到程序员指定的次数。 这个 FOR 循环有不同的版本。

批处理脚本中的 For \F

发布时间:2023/05/19 浏览次数:151 分类:操作系统

本文将讨论在批处理脚本中使用 FOR /F 循环。在批处理脚本中使用 FOR /F 循环 此类 FOR 循环的一般格式如下所示:

批处理文件循环遍历子目录中的文件

发布时间:2023/05/19 浏览次数:163 分类:操作系统

本文说明了我们如何编写一个批处理脚本来循环遍历子目录中的文件。 我们将举一个例子来解释这个概念。批处理文件循环遍历子目录中的文件

批处理文件删除文件名的 X 个字符

发布时间:2023/05/19 浏览次数:136 分类:操作系统

本文说明了我们如何使用批处理脚本从文件的文件名中删除特定字符。 我们将在下面介绍在 Windows 上重命名文件的几种方法。Windows 上的文件资源管理器重命名

在批处理脚本中声明变量

发布时间:2023/05/19 浏览次数:69 分类:操作系统

本文将演示如何在批处理脚本中声明和定义变量。在批处理脚本中声明变量。在 Batch 中,不需要使用任何其他关键字来声明整数、浮点数、双精度或字符串类型变量。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便