On m'a dit en php qu'il était préférable d'éviter autant que possible d'utiliser la commande exit.
Est-ce la même chose pour bash?
Par exemple est la suivante
#!/bin/bash
if [ -z $1 ]; then
echo You need to enter the directory you want to backup
else
sourceFile=$1
targetFile=/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)
tar cvf $targetFile $sourceFile
fi
Préféré à cela?
#!/bin/bash
if [ -z $1 ]; then
echo You need to enter the directory you want to backup
exit
fi
sourceFile=$1
targetFile=/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)
tar cvf $targetFile $sourceFile
Citant ' Code Complete '
Utilisez [exit] lorsque cela améliore la lisibilité Dans certaines routines, une fois que vous connaissez la réponse, vous souhaitez [quitter] immédiatement la routine d'appel. Si la routine est définie de telle sorte qu’elle ne nécessite aucun nettoyage supplémentaire une fois qu’elle détecte une erreur, ne pas [quitter] immédiatement signifie que vous devez écrire plus de code.
Donc normalement, une sortie est préférable (les personnes qui consultent votre code ne doivent pas trouver l’instruction de sortie correcte), mais la vérification des erreurs (en particulier au début d’un programme/programme comportant plusieurs instructions de sortie est plus claire.
Votre exemple est borderline, mais je dirais que le second est préférable pour que la maintenance de votre programme/script puisse le ranger.
Votre programme est actuellement (en psudocode)
if error condition 1
// Show error message 1
else
// Do stuff
fi
ou
if error condition 1
// Show error message 1
// exit
fi
// Do stuff
Une fois que votre programme a grandi, vous vous rendez compte de plusieurs autres façons que le programme peut échouer. Votre programme devient maintenant
if error condition 1
// Show error message 1
else
if error condition 2
// Show error message 2
else
if error condition 3
// Show error message 3
else
// Do stuff
fi
fi
fi
ou peut-être
if error condition 1
// Show error message 1
else if error condition 2
// Show error message 2
else if error condition 3
// Show error message 3
else
// Do stuff
fi
versus
if error condition 1
// Show error message 1
// exit
else if error condition 2
// Show error message 2
// exit
else if error condition 3
// Show error message 3
// exit
fi
// Do stuff
Dans mon esprit, le dernier est le plus clair pour pouvoir identifier quels sont les cas d’erreur et quel est le flux principal du programme. Ajoutez maintenant différentes valeurs renvoyées (par exemple 0 en cas de succès, 1 en cas d'erreur 1, 2 en cas d'erreur 2, etc.) et la différence deviendra plus prononcée.
Je suppose que cela dépend du script dans une certaine mesure de votre code et de ce que vous essayez d'accomplir, des interruptions, du traitement des erreurs, etc.
En général, vous voulez soit spécifier un statut de sortie
exit 1
ou mis -e
#!/bin/bash -e
Vous pouvez ajouter la gestion des erreurs de différentes manières.
command 1 || echo "command 1 failed"
écrire des fonctions à des pièges.
Il y a quelques discussions de Nice (introduction) avec des références:
Ma préférence est la suivante:
#!/bin/bash
if [[ -z "$1" ]]; then
# Notice that I added quotes and redirection
echo "You need to enter the directory you want to backup" 1>&2
exit
fi
# Notice that I fixed the indentation
sourceFile="$1"
targetFile="/home/me/Desktop/myBackups/files_$(date +%Y_%m_%d_%s)"
tar cvf "$targetFile" "$sourceFile"
Je pense que partir du moment où il est clair que le programme ne peut pas continuer ou où il est clairement terminé aboutit au code le plus propre.
Sur une note non liée, méfiez-vous des chaînes non citées dans Bash. Ils te mordront tôt ou tard. C'est une bonne habitude de toujours entourer les chaînes de guillemets (même lorsque c'est techniquement inutile) à moins que vous ne souhaitiez spécifiquement le comportement sans guillemets. Aussi, tant que vous utilisez bash, [[
est bien meilleur que [
.