J'ai un morceau de code suivant qui dit que si tout est exécuté, envoyez un courrier à une personne s'il échoue, envoyez un message d'erreur à la personne.
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" [email protected]
else
mailx -s" PreProcessed files" [email protected]
fi
done
Je suis nouveau sur le codage Linux Je veux comprendre ce que if [[ $? -ne 0 ]];
signifie
Décomposer, termes simples:
[[ and ]]
... signifie qu'un test est fait pour la véracité.
$?
... est une variable contenant le code de sortie de la dernière commande exécutée.
-ne 0
... vérifie que l'élément à gauche ($?
) n'est "pas égal" à "zéro". Sous UNIX, une commande qui quitte avec zéro a réussi, alors qu'une sortie avec une autre valeur (1, 2, 3 ... jusqu'à 255) est un échec.
if [[ $? -ne 0 ]];
Vérifie le code de retour de immédiatement précédent cette condition si.
$?
signifie code retour$? -ne 0
signifie que la commande précédente a renvoyé une erreur car 0 est considéré comme un succèsSi la commande précédente a renvoyé un code d'erreur.
Vraisemblablement, l'extrait de code fait partie d'un code qui ressemble à quelque chose comme:
for var in list of words; do
cmd $var
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" [email protected]
else
mailx -s" PreProcessed files" [email protected]
fi
done
Ce qui pourrait (et devrait) être réécrit plus simplement comme suit:
for var in list of words; do
if ! cmd $var; then
message="could not PreProcess files"
else
message="PreProcessed files
fi
mailx -s" $message" [email protected]
done
La clause [[ $? -ne 0 ]]
est un moyen astucieux de vérifier la valeur de retour de cmd
, mais il est presque toujours inutile de vérifier explicitement $?
. Le code est presque toujours plus propre si vous laissez le shell effectuer la vérification en appelant la commande dans la clause if.