Shell多个命令间隔符号;、&、&&、 和 区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell多个命令间隔符号;、&、&&、 和 区别相关的知识,希望对你有一定的参考价值。

参考技术A 用 & 连接的多个符号将同时执行,不管命令是否执行成功

单个的与符号通常可以发现在一个 bash 命令的行尾:

其作用是令该命令转到后台执行。对于这样的命令,系统会创建一个 sub-shell 来运行这个命令。同时,在执行改行命令的 shell 环境中,这个命令会立刻返回 0 并且继续下面的 shell 命令的执行。除此之外,在执行这个命令之后,terminal 上会输出创建的 sub-shell 的线程 ID(PID)。

注意按照这种方法分支出去的 sub-shell 的 stdout 会仍然关联到其 parent-shell,也就是说你在当前的 terminal 中仍然可以发现这个后台进程的 stdout 输出。

通过&分支出去的 sub-shell 的 PID 被存储在一个特殊的变量 $! 中,

同时,你也可以通过 jobs 命令来检查 sub-shell 的信息

对于 sub-shell,你可以通过 fg 命令将其拉回当前的 terminal。

如果有多个命令需要放到后台运行,可以采用如下方式:

在这个例子中,三个脚本会同时开始运行,且拥有各自独立的 sub-shell 环境。在 shell 脚本中,这个方法常常被用来利用计算机的多核性能来加速执行。

&& 左边的命令(命令 1)返回真(即返回 0,成功被执行)后, && 右边的命令(命令 2)才能够被执行;换句话说,“如果这个命令执行成功 && 那么执行这个命令”

管道符号,是 unix 一个很强大的功能,符号为一条竖线:"|"。

他的功能是把第一个命令 command 1 执行的结果作为 command2 的输入传给 command 2

|| 则与 && 相反。如果 || 左边的命令(command1)未执行成功,那么就执行 || 右边的命令(command2);或者换句话说,“如果这个命令执行失败了 || 那么就执行这个命令”。

Linux Shell 几个特殊符号命令 & && ||

  1. & 放在启动参数后面表示设置此进程为后台进程

 

       默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。

   2.  &&和||

shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。

有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。

语法格式如下:

command1 && command2 [&& command3 ...] 

1 命令之间使用 && 连接,实现
逻辑与的功能。 

2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 

3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。 

逻辑或的功能

command1 || command2 [|| command3 ...] 

1 命令之间使用 || 连接,实现
逻辑或的功能。 

2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。 

3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。 –直到返回真的地方停止执行。

以上是关于Shell多个命令间隔符号;、&、&&、 和 区别的主要内容,如果未能解决你的问题,请参考以下文章

Linux Shell 几个特殊符号命令 & && ||

shell命令运行符号&;&&区别

[shell]Shell经常使用特殊符号

shell中的特殊符号

shell第四篇(上)

Linux -shell特殊符号