it-swarm-fr.com

Bash: exécuter la commande si la commande échoue

Je veux faire quelque chose comme ça:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

Comment dois-je procéder?

51
michelemarcon

Ceux-ci devraient faire ce dont vous avez besoin:

cmd1 && cmd2 && echo success || echo epic fail

ou

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
79
Petr Uzel

Petr Uzel est parfait, mais vous pouvez également jouer avec la magie $?.

$? contient le code de sortie de la dernière commande exécutée, et si vous l'utilisez, vous pouvez écrire vos scripts de manière assez flexible.

Cette question touche un peu ce sujet, Meilleure pratique pour utiliser $? In bash? .

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

Ensuite, vous pouvez également réagir à différents codes de sortie et faire différentes choses si vous le souhaitez.

25
Johan

Le pseudo-code de la question ne correspond pas au titre de la question.

Si quelqu'un a besoin de savoir comment exécuter la commande 2 en cas d'échec de la commande 1, voici une explication simple:

  • cmd1 || cmd2: Cela s'exécutera cmd1, et en cas d'échec, il s'exécutera cmd2
  • cmd1 && cmd2: Cela s'exécutera cmd1, et en cas de succès, il s'exécutera cmd2
  • cmd1 ; cmd2: Cela s'exécutera cmd1, puis il s'exécutera cmd2, indépendamment de l'échec ou du succès de l'exécution cmd1.
17