“&&”的目的是什么?在shell命令中?

时间:2010-12-22 15:22:21

标签: bash shell command-line syntax

据我所知,在命令后使用&是为了在后台运行它。

&用法示例:tar -czf file.tar.gz dirname &

&&怎么样? (看看这个例子:https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188

9 个答案:

答案 0 :(得分:355)

&&允许您根据前一个命令是否成功完成来执行某些操作 - 这就是为什么您倾向于将其链接为do_something && do_something_else_that_depended_on_something

答案 1 :(得分:330)

此外,您还有||这是逻辑或者;,它只是一个分隔符,它不关心以前命令发生的事情。

$ false || echo "Oops, fail"
Oops, fail

$ true || echo "Will not be printed"
$  

$ true && echo "Things went well"
Things went well

$ false && echo "Will not be printed"
$

$ false ; echo "This will always run"
This will always run

有关此内容的一些详细信息,请参阅Bash手册中的Lists of Commands

答案 2 :(得分:89)

  

命令行 - &&的目的是什么?

在shell中,当你看到

$ command one && command two

意图是仅在第一个命令成功时才执行&&之后的命令。这是Posix shell的惯用语,不仅仅是在Bash中找到的。

如果第一个进程失败,它打算阻止第二个进程的运行。

进程返回0表示true,其他正数表示false

程序在退出时返回signal。如果它们成功退出,它们应返回0,否则返回大于零。这允许进程之间进行有限的通信。

&&AND_IF被称为||posix shell grammarand_or list命令的一部分,其中还包含OR_IF具有类似语义的%token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */

语法符号:

and_or           :                         pipeline
                 | and_or AND_IF linebreak pipeline
                 | and_or OR_IF  linebreak pipeline

语法:

$ false && echo foo || echo bar
$ true || echo foo && echo bar

两个运算符具有相同的优先级,并且从左到右进行求值(它们是左关联的)例如,以下内容:

bar

仅回显1

  1. 在第一种情况下,false是退出状态为$ false $ echo $? 1

    的命令
    echo foo

    表示 echo foo无法运行(即短路echo bar)。然后执行命令0

  2. 在第二种情况下,真实退出时代码为$ true $ echo $? 0

    echo foo

    因此echo bar未执行,然后执行selenium

答案 3 :(得分:30)

'&&'的常见用法用autotools编译软件。例如:

./configure --prefix=/usr && make && sudo make install

基本上,如果配置成功,则运行make以进行编译,如果成功,则以root身份运行make以安装程序。当我确信事情会起作用时,我会使用它,它允许我做其他重要的事情,比如看看stackoverflow而不是'监视'进度。

有时候我真的被带走了......

tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf

我这样做的时候,例如从头开始制作一个linux。

答案 4 :(得分:17)

&&将命令串起来。连续命令仅在前面的命令成功时执行。

同样,如果前一个命令失败,||将允许执行连续命令。

请参阅Bash Shell Programming

答案 5 :(得分:8)

参见示例:

mkdir test && echo "Something" > test/file

Shell将尝试创建目录test,然后只有在成功时才会尝试在其中创建文件。

因此,如果其中一个步骤失败,您可以中断一系列步骤。

答案 6 :(得分:6)

command_1 && command_2:仅在command_1成功执行时执行command_2。

command_1 || command_2:仅在command_1未成功执行时执行command_2。

感觉类似于'如果'条件在主流编程语言中执行,例如,if (condition_1 && condition_2){...}如果condition_1为false,则条件__2将被省略;如果条件_1为if (condition_1 || condition_2){...},则true条件__2将被省略。 看,它与你用于编码的技巧相同:)

答案 7 :(得分:5)

如果第一个语句成功结束,则执行第二个语句。像if语句一样:

 if (1 == 1 && 2 == 2)
  echo "test;"

如果1 == 1则首次尝试,如果为真则检查2 == 2

答案 8 :(得分:1)

####################### && or (Logical AND) ######################
first_command="1"
two_command="2"

if [[ ($first_command == 1) && ($two_command == 2)]];then
 echo "Equal"
fi

当程序检查命令是否存在时,程序将创建一个称为退出代码的数字,如果两个条件均成立,则退出代码为零(0),否则,退出代码为正数。仅当显示退出代码为零(0)时表示等于时,这意味着两个条件都为真。