shell命令中“&&”的用途是什么?

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

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

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

&&可以让你根据前一个命令是否成功完成一些事情 – 这就是为什么你倾向于将它链接为do_something && do_something_else_that_depended_on_something

而且,你也有|| 这是合乎逻辑的,也是; 这只是一个不关心之前发生的事情的分隔符。

 $ false || echo "Oops, fail" Oops fail $ true || echo "Will not be printed" $ $ true && echo "Things went well" Things went well $ false ; echo "This will always run" This will always run 

关于这个的一些细节可以在这里find命令列表在Bash手册。

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

在壳里,当你看到

 $ command one && command two 

意图是仅当第一个命令成功时才执行&&的命令。 这是Posix炮弹的惯用,不仅在Bash中发现。

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

进程返回0为真,其他正数为假

程序退出时返回一个信号 。 他们应该返回0,如果他们成功退出,或大于零,如果他们不。 这允许进程之间的有限数量的通信。

&&在posix shell语法中被称为AND_IF ,它是一个and_or命令列表的一部分,其中还包括|| 这是一个具有类似语义的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 $ echo $? 1 

    这意味着echo foo不运行 (即, echo foo短路)。 然后命令echo bar被执行。

  2. 在第二种情况下,真正的退出代码为0

     $ true $ echo $? 0 

    因此不会执行echo foo ,然后执行echo bar

“&&”的常见用法是用autotools编译软件。 例如:

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

基本上如果configuration成功,make运行编译,如果成功,make以root身份运行安装程序。 我使用这个时,我基本肯定的事情会起作用,它允许我做其他重要的事情,如看看stackoverflow不是“监视”的进展。

有时候我真的被带走了

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

我这样做,例如从头开始一个Linux的框。

&&string命令在一起。 连续的命令只有在前面的命令成功时才执行。

同样, || 将允许后续的命令执行,如果前面的失败。

请参阅Bash Shell编程 。

看例子:

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

Shell将尝试创build目录test ,然后, 只有在成功的情况下才会尝试在其中创build文件。

所以如果其中一个失败,你可能会中断一系列的步骤。

command_1 && command_2 :只有当command_1执行成功时才执行command_2。

command_1 || command_2 command_1 || command_2 :只有当command_1执行不成功时才执行command_2。

感觉与在主stream编程语言中如何执行“if”条件类似, if (condition_1 && condition_2){...} condition_2将被省略,如果condition_1为falseif (condition_1 || condition_2){...}如果condition_1为true那么condition_2将被忽略。 看,这是你用于编码的相同的技巧:)

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

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

它的第一次尝试,如果1 == 1,如果这是真的,它会检查2 == 2