33.7. Optimisations

La plupart des scripts shell sont des solutions rapides et sales pour des problèmes non complexes. Du coup, les optimiser en rapidité n'est pas vraiment un problème. Considérez le cas où un script réalise une tâche importante, le fait bien mais fonctionne trop lentement. Le réécrire avec un langage compilé peut ne pas être une option très agréable. La solution la plus simple serait de réécrire les parties du script qui le ralentissent. Est-il possible d'appliquer les principes de l'optimisation de code même à un script lent ?

Vérifiez les boucles dans le script. Le temps consommé par des opérations répétitives s'ajoute rapidement. Si c'est possible, supprimez les opérations consommatrices de temps des boucles.

Utilisez les commandes internes plutôt que les commandes système. Ces commandes intégrées s'exécutent plus rapidement et ne lancent habituellement pas un sous-shell lors de leur appel.

Évitez les commandes non nécessaires, particulièrement dans un tuyau.

cat "$fichier" | grep "$mot"

grep "$mot" "$fichier"

#  Les lignes de commandes ci-dessus ont un effet identique, mais le deuxième
#+ tourne plus vite comme il est lancé sur moins de processus.
            

La commande cat semble particulièrement sujette à une sur-utilisation dans les scripts.

Utilisez les outils time et times pour vérifier les commandes particulièrement intensives. Considérez la réécriture des sections critiques en code C, voire en assembleur.

Essayez de minimiser les entrées/sorties fichier. Bash n'est pas particulièrement efficace sur la gestion des fichiers, donc considérez l'utilisation d'outils plus appropriés pour ceci dans le script, tels que awk ou Perl.

Écrivez vos scripts d'une façon structurée, cohérente, ainsi ils peuvent être réorganisés et sécurisés selon les besoins. Quelques unes des techniques d'optimisation applicables aux langages de haut niveau peuvent fonctionner pour des scripts mais d'autres, tels que le déroulement de boucles, sont pratiquement impossibles. Par dessus tout, utilisez votre bon sens.

Pour une excellente démonstration du fait qu'une optimisation drastique réduit le temps d'exécution d'un script, voir l'Exemple 15.44, « Paiement mensuel sur une hypothèque ».