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 几个特殊符号命令 & && ||
- & 放在启动参数后面表示设置此进程为后台进程
默认情况下,进程是前台进程,这时就把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多个命令间隔符号;、&、&&、 和 区别的主要内容,如果未能解决你的问题,请参考以下文章