Bonnes pratiques pour écrire un script
Dans Linux, un script est un fichier rassemblant une succession de commandes.
Toutes les commandes peuvent être écrites les unes à la suite des autres.
Elles sont exécutées séquentiellement par le shell.
Pour une bonne exécution du script, il est toutefois conseillé de le structurer correctement pour éviter les mauvaises surprises.
Personnellement, je respecte toujours les règles suivantes :
1 - Toujours nommer son script avec l'extension ".sh" (facilite la recherche)
2 - La première ligne d'un script doit toujours indiquer quel interpréteur de commande utiliser, par exemple :
#!/bin/bash
#!/bin/sh
#!/usr/bin/python
#!/usr/bin/php
3 - Renseigner la variable PATH :
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
La variable PATH permet d'indiquer au shell les répertoires où sont situés les commandes externes utilisées.
En console, la variable PATH est initialisée à la connexion ce qui fait qu'il n'est pas nécessaire d'indiquer le chemin complet d'une commande afin de l'exécuter. Si le script est exécuté uniquement en console, il n'est pas nécessaire d'initialiser la variable PATH mais si le script est exécuté via une tâche cron, la variable PATH est inconnue, dans ce cas, toutes les commandes externes utilisées dans le script ne pourront pas être exécutées.
4 - Rediriger la sortie d'erreur standard dans un fichier de log spécifique, par exemple :
exec 2>>/var/log/mon_script_error.log
exec 2>/dev/null (s'il n'est pas nécessaire de "logguer" les différentes erreurs rencontrées)
5 - Terminer le script avec la commande suivante :
exit 0
Exemple avec un script basique :
$ cat mon_script.sh
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
exec 2>/dev/null
...
mes commandes
...
exit 0
Commentaires
François-Hugues (non vérifié)
lun, 06/11/2017 - 00:22
Permalien
[Exit 0]
Même si globalement c'est intéressant, une erreur flagrande est citée : finir le programme par un "exit 0".
Si "tes commandes" s'exécutent pas correctement et font n'importe quoi, c'est pas grave, de toute façon le script fini par "exit 0". Comme cela, on croira que tout s'est bien passé !
Il faut donc savoir gérer dans le script les codes retours et faire en sorte que si ce script ne s'exécute pas correctement, il sorte avec un code retour différent de 0.
ronan
lun, 06/11/2017 - 15:38
Permalien
Tout à fait ...
... c'est pour cette raison qu'au point 4 j'indique ceci:
dans la cas où l'on souhaite tracer les erreurs, ou bien:
si la gestion des erreurs n'a pas d'importance.
Mais il est vrai que la gestion des erreurs est tellement complexe, que ce n'est pas évident de l'expliquer sans avoir un cas concrêt.
Toujours est-il que je pense qu'il est quand même préférable que la dernière ligne d'un script soit "exit 0" et que les erreurs soient gérées au fur et à mesure de l'exécution du script.
De cette manière, si toutes les opérations se sont bien déroulées, le script se termine correctement.
Ajouter un commentaire