Quel est le but de «&&» dans une commande shell?

Pour autant que je sache, l’utilisation de & after la commande sert à l’exécuter en arrière-plan.

Exemple d’utilisation & : tar -czf file.tar.gz dirname &

Mais qu’en est-il && ? (regardez cet exemple: https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )

&& vous permet de faire quelque chose en fonction de la réussite de la commande précédente – c’est pourquoi vous avez tendance à le voir enchaîné comme do_something && do_something_else_that_depended_on_something .

De plus, vous avez aussi || qui est le logique ou, et aussi ; qui est juste un séparateur qui ne se soucie pas de ce qui est arrivé à la commande auparavant.

 $ 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 

Quelques détails à ce sujet peuvent être trouvés ici Listes des commandes dans le manuel Bash.

ligne de commande – quel est le but de && ?

En coquille, quand on voit

 $ command one && command two 

L’intention est d’exécuter la commande qui suit le && uniquement si la première commande est réussie. Ceci est idiomatique des shells Posix, et pas seulement dans Bash.

Il a l’intention d’empêcher l’exécution du deuxième processus si le premier échoue.

Les processus renvoient 0 pour true, d’autres nombres positifs pour false

Les programmes renvoient un signal à la sortie. Ils doivent renvoyer 0 s’ils réussissent à sortir ou supérieurs à zéro s’ils ne le font pas. Cela permet une communication limitée entre les processus.

Le && est appelé AND_IF dans la grammaire du shell posix , qui fait partie d’une liste and_or de commandes, qui inclut également le || qui est un OR_IF avec une sémantique similaire.

Symboles de grammaire:

 %token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */ 

Grammaire:

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

Les deux opérateurs ont la même priorité et sont évalués de gauche à droite (ils sont laissés associatifs). Par exemple, les éléments suivants:

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

les deux ne font écho qu’au bar .

  1. Dans le premier cas, le faux est une commande qui sort avec le statut 1

     $ false $ echo $? 1 

    ce qui signifie que echo foo ne fonctionne pas (c.-à-d., echo foo court circuit). Ensuite, la echo bar commande est exécutée.

  2. Dans le second cas, true quitte avec un code de 0

     $ true $ echo $? 0 

    et donc echo foo n’est pas exécuté, alors la echo bar est exécutée.

Un usage assez courant de ‘&&’ est la compilation de logiciels avec des autotools. Par exemple:

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

Fondamentalement, si la configuration réussit, make est exécuté pour comstackr et si cela réussit, make est exécuté en tant que root pour installer le programme. Je l’utilise quand je suis surtout sûr que les choses vont marcher, et cela me permet de faire d’autres choses importantes comme regarder le stackoverflow et non pas «surveiller» la progression.

Parfois, je suis vraiment emporté …

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

Je le fais lorsque, par exemple, vous créez une boîte Linux à partir de zéro.

&& ssortingngs commandes ensemble. Les commandes successives ne s’exécutent que si les précédentes réussissent.

De même, || permettra l’exécution de la commande successive si le précédent échoue.

Voir Programmation Bash Shell .

Voir l’exemple:

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

Shell essaiera de créer un test répertoire test et seulement si cela réussit, il essayera de créer un fichier à l’intérieur.

Vous pouvez donc interrompre une séquence d’étapes si l’une d’elles a échoué.

command_1 && command_2 : exécute command_2 uniquement lorsque la commande_1 est exécutée avec succès.

command_1 || command_2 command_1 || command_2 : exécute command_2 uniquement lorsque commande_1 n’est pas exécutée avec succès.

Est similaire à la façon dont une condition “if” est exécutée dans un langage de programmation général, comme if (condition_1 && condition_2){...} condition_2 sera omis si condition_1 est false et dans if (condition_1 || condition_2){...} condition_2 sera omis si condition_1 est true . Voyez, c’est le même truc que vous utilisez pour le codage 🙂

C’est pour exécuter une deuxième déclaration si la première instruction se termine avec succès. Comme une déclaration if:

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

Ses premiers essais si 1 == 1, si cela est vrai, il vérifie si 2 == 2