web-dev-qa-db-fra.com

Que fait-on si [[$? -ne]]; signifie en .ksh

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 

10
Rahul sawant

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.

13
bishop
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ès
5
anubhava

Si la commande précédente a renvoyé un code d'erreur. 

0
Claudio

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. 

0
William Pursell