Guide avancé d'écriture des scripts Bash: | ||
---|---|---|
Précédent | Chapitre 33. Ecrire des scripts avec style | Suivant |
Commentez votre code. Cela le rend plus facile à comprendre (et apprécier) par les autres, et plus facile pour vous à maintenir.
PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}" # Cela avait un sens lorsque vous l'aviez écrit l'année dernière, mais #+ c'est un mystère complet. # (A partir du script "pw.sh" de Antek Sawicki.) |
Ajoutez des entêtes descriptives à votre script et à vos fonctions.
#!/bin/bash #************************************************# # xyz.sh # # écrit par by Bozo Bozeman # # 05 Juil. 2001 # # # # Fait le ménage dans les fichiers projets. # #************************************************# MAUVAISREPERTOIRE=65 # No such directory. rep_projets=/home/bozo/projects # Répertoire à nettoyer. # ------------------------------------------------------- # # nettoie_pfichiers () # # Supprime tous les fichiers dans le répertoire indiqué. # # Paramètre: $repertoire_cible # # Renvoie: 0 en cas de succès, $MAUVAISREPERTOIRE sinon. # # ------------------------------------------------------- # nettoie_pfichiers () { if [ ! -d "$1" ] # Teste si le répertoire cible existe. then echo "$1 n'est pas un répertoire." return $MAUVAISREPERTOIRE fi rm -f "$1"/* return 0 # Succès. } nettoie_pfichiers $rep_projets exit 0 |
Eviter d'utiliser des << nombres magiques >>, [1] c'est-à-dire, des constantes littérales << codées en dur >>. Utilisez des noms de variables significatifs à la place. Ceci rend le script plus facile à comprendre et permet de faire des changements et des mises à jour sans casser l'application.
if [ -f /var/log/messages ] then ... fi # Un an après, vous décidez de changer le script pour vérifier /var/log/syslog. # Il est maintenant nécessaire de changer manuellement le script, instance par #+ instance, et espérer ne rien casser. # Un meilleur moyen: FICHIERTRACE=/var/log/messages # Seulement une ligne a besoin d'être modifié. if [ -f "$FICHIERTRACE" ] then ... fi |
Choisissez des noms descriptifs pour les variables et les fonctions.
fl=`ls -al $nomrep` # Crypté. liste_fichiers=`ls -al $nomrep` # Mieux. VALMAX=10 # Tout en majuscule pour les constantes du script. while [ "$index" -le "$VALMAX" ] ... E_PASTROUVE=75 # Tout en majuscule pour les codes d'erreur, # et leur nom commence par "E_". if [ ! -e "$nomfichier" ] then echo "Fichier $nomfichier introuvable." exit $E_PASTROUVE fi REPERTOIRE_MAIL=/var/spool/mail/bozo # Tout en majuscule pour une variable d'environnement. export REPERTOIRE_MAIL ObtientReponse () # Majuscule et minuscule pour une fonction. { invite=$1 echo -n $invite read reponse return $reponse } ObtientReponse "Quel est votre nombre favori ? " nombre_favori=$? echo $nombre_favori _variableutilisateur=23 # OK, mais pas recommendé. # Il est mieux pour les variables définies par les utilisateurs de ne pas #+ commencer avec un tiret bas. # Laissez cela pour les variables système. |
Utiliser des codes de sortie d'une façon systématique et significative.
E_MAUVAIS_ARGS=65 ... ... exit $E_MAUVAIS_ARGS |
Casser les scripts complexes en modules plus simples. Utiliser des fonctions si c'est approprié. Voir Exemple 35-4.
N'utilisez pas une construction complexe lorsqu'une plus simple fait l'affaire.
COMMANDE if [ $? -eq 0 ] ... # Redondant et non intuitif. if COMMANDE ... # Plus concis (même si moins compréhensible). |
... reading the UNIX source code to the Bourne shell (/bin/sh). I was shocked at how much simple algorithms could be made cryptic, and therefore useless, by a poor choice of code style. I asked myself, << Could someone be proud of this code? >> ... lisant le code source UNIX du shell Bourne (/bin/sh). J'ai été choqué de voir à quel point de simples algorithmes pouvaient être rendus incompréhensibles, et du coup inutiles, par un mauvais choix dans le style de codage. Je me suis demandé, << Quelqu'un peut-il être fier de ce code? >> | |
Landon Noll |
[1] | Dans ce contexte, les << nombres magiques >> ont une signification entièrement différente que les nombres magiques utilisés pour désigner les types de fichier. |
Précédent | Sommaire | Suivant |
Ecrire des scripts avec style | Niveau supérieur | Divers |