Vous n'avez pas besoin de tester si $?
n'est pas 0
. L'obus fournit &&
y ||
afin que vous puissiez facilement bifurquer en fonction du résultat implicite de ce test :
some_command && {
# executes this block of code,
# if some_command would result in: $? -eq 0
} || {
# executes this block of code,
# if some_command would result in: $? -ne 0
}
Vous pouvez supprimer l'une ou l'autre branche, selon ce que vous voulez. Donc si vous voulez juste tester l'échec (c'est-à-dire $? -ne 0
) :
some_command_returning_nonzero || {
# executes this block of code when: $? -ne 0
# and nothing if the command succeeds: $? -eq 0
}
Cependant, le code que vous avez fourni dans la question fonctionne, tel quel. Je suis confus que vous ayez obtenu des erreurs de syntaxe et que vous ayez conclu que $?
était une chaîne de caractères. Il est fort probable que le code errant à l'origine de l'erreur de syntaxe n'ait pas été fourni avec la question. Cela est d'autant plus évident que vous affirmez que les solutions des autres ne fonctionnent pas non plus. Lorsque cela se produit, vous devez réévaluer vos hypothèses.
NB : Le code ci-dessus peut donner des résultats confus si le code à l'intérieur des accolades renvoie une erreur. Dans ce cas, utilisez simplement la fonction if
à la place, comme ceci :
if some_command; then
# executes this block of code,
# if some_command would result in: $? -eq 0
else
# executes this block of code,
# if some_command would result in: $? -ne 0
fi