Quel est le but de "&&" dans une commande shell?

autant que je sache, utiliser & après la commande est pour l'exécuter en arrière-plan.

exemple d'utilisation de & : tar -czf file.tar.gz dirname &

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

272
demandé sur codeforester 2010-12-22 18:22:20

8 réponses

&& permet de faire quelque chose en se basant sur le fait que la commande précédente a été complétée avec succès - c'est pourquoi vous avez tendance à la voir enchaînée comme do_something && do_something_else_that_depended_on_something .

304
répondu girasquid 2010-12-22 15:23:56

de plus, vous avez aussi || qui est l'or logique, et aussi ; qui est juste un séparateur qui ne se soucie pas de ce qui arrive à la commande avant.

$ 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 de commandes dans le manuel de Bash.

286
répondu plundra 2018-06-08 17:57:12
"1519220920 de ligne de commande" - quel est le but de && ?

dans shell, quand vous voyez

$ command one && command two

l'intention est d'exécuter la commande qui suit le && seulement si la première commande est réussie. C'est idiomatique des coquilles Posix, et pas seulement trouvé dans Bash.

elle a l'intention d'empêcher le fonctionnement du deuxième processus si le premier échoue.

Processus de retour de 0 pour de vrai, d'autres numéros de positifs pour de faux

"1519250920 Programmes de" retour signal sur la sortie. Ils devraient retourner 0 s'ils sortent avec succès, ou plus de zéro s'ils ne sortent pas. Cela permet une communication limitée entre les processus.

le && est appelé AND_IF dans le grammaire en coquille posix , qui fait partie d'un and_or liste de commandes, qui comprennent également les || qui est un OR_IF avec des analogues de la sémantique.

la Grammaire des symboles:

%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 associatifs de gauche) par exemple, le suivant:

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

les deux echo only bar .

  1. dans le premier cas, le false est une commande qui sort avec le statut de 1

    $ false
    $ echo $?
    1
    

    qui signifie echo foo ne s'exécute pas (c.-à-d. courtcircuit echo foo ). Puis la commande echo bar est exécutée.

  2. dans le second cas, vrai sorties avec un code de 0

    $ true
    $ echo $?
    0
    

    et donc echo foo n'est pas exécuté, alors echo bar est exécuté.

72
répondu Aaron Hall 2018-01-13 02:35:03

un usage assez courant pour '&&' est la compilation de logiciels avec des autotools. Par exemple:

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

essentiellement si le configure réussit, make est lancé pour compiler, et si cela réussit, make est lancé comme root pour installer le programme. Je l'utilise quand je suis presque sûr que les choses vont marcher, et il me permet de faire d'autres choses importantes comme regarder stackoverflow et pas "surveiller" les progrès.

Parfois, je m'emporte...

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

je fais cela quand par exemple faire un linux à partir de scratch box.

30
répondu Nigel Atkinson 2012-06-18 23:20:48

&& chaînes commandes ensemble. Les commandes successives ne s'exécutent que si les commandes précédentes réussissent.

de même, || permettra à la commande successive de s'exécuter si la précédente échoue.

Voir Shell Bash De Programmation .

16
répondu Dean Burge 2010-12-22 15:29:29

voir l'exemple:

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

Shell va essayer de créer le répertoire test et puis, seulement si c'était réussi va essayer de créer le fichier à l'intérieur.

donc vous pouvez interrompre une séquence d'étapes si l'une d'elles a échoué.

6
répondu alno 2010-12-22 15:26:36

command_1 && command_2 : n'exécute command_2 que si command_1 est exécuté avec succès.

command_1 || command_2 : n'exécute command_2 que si command_1 n'est pas exécuté avec succès.

se sent similaire à la façon dont une condition" si "est exécutée dans un langage de programmation grand public, comme dans 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 . Voir, c'est la même astuce que vous utilisez pour coder:)

6
répondu Xiaonin Li 2017-06-30 17:43:32

il s'agit d'exécuter une deuxième instruction 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 c'est vrai, il vérifie si les 2==2

3
répondu Nick 2017-11-28 14:48:30