Guide avancé d'écriture des scripts Bash Une exploration en profondeur de l'art

Guide avancé d'écriture des scripts Bash Une exploration en profondeur de l'art de la pro- grammation shell Mendel Cooper Guide avancé d'écriture des scripts Bash: Une exploration en profondeur de l'art de la programmation shell Mendel Cooper 5.1.04 Publié le 26 décembre 2007 Résumé Ce tutoriel ne suppose aucune connaissance de la programmation de scripts, mais permet une progression rapide vers un niveau in- termédiaire/avancé d'instructions tout en se plongeant dans de petites astuces du royaume d'UNIX®. Il est utile comme livre, comme manuel permettant d'étudier seul, et comme référence et source de connaissance sur les techniques de programmation de scripts. Les exercices et les exemples grandement commentés invitent à une participation active du lecteur avec en tête l'idée que la seule façon pour vraiment apprendre la programmation de scripts est d'écrire des scripts. Ce livre est adapté à une utilisation en classe en tant qu'introduction générale aux concepts de la programmation. La dernière mise à jour de ce document, comme une « archive tar » compressée avec bzip2 incluant à la fois le source SGML et le HTML généré, peut être téléchargée à partir du site personnel de l'auteur. Une version PDF est aussi disponible (site miroir du PDF). Voir le journal des modifications pour un historique des révisions. Dédicace Pour Anita, la source de toute magie i Part 1. Introduction .......................................................................................................................................... 1 1. Pourquoi la programmation Shell ? ........................................................................................................... 2 2. Lancement avec un « #! » ........................................................................................................................ 4 2.1. Appeler le script ............................................................................................................................ 7 2.2. Exercices préliminaires .................................................................................................................. 8 Part 2. Bases .................................................................................................................................................. 9 3. Caractères spéciaux ...............................................................................................................................10 4. Introduction aux variables et aux paramètres ..............................................................................................28 4.1. Substitution de variable .................................................................................................................28 4.2. Affectation de variable ..................................................................................................................30 4.3. Les variables Bash ne sont pas typées ...............................................................................................32 4.4. Types spéciaux de variables ...........................................................................................................33 5. Guillemets et apostrophes .......................................................................................................................37 5.1. Placer les variables entre guillemets .................................................................................................37 5.2. Échappement ...............................................................................................................................38 6. Sortie et code de sortie (ou d'état) ............................................................................................................44 7. Tests ..................................................................................................................................................46 7.1. Constructions de tests ....................................................................................................................46 7.2. Opérateurs de test de fichiers ..........................................................................................................52 7.3. Autres opérateurs de comparaison ...................................................................................................54 7.4. Tests if/then imbriqués ..................................................................................................................59 7.5. Tester votre connaissance des tests ..................................................................................................59 8. Opérations et sujets en relation ................................................................................................................61 8.1. Opérateurs ..................................................................................................................................61 8.2. Constantes numériques ..................................................................................................................67 Part 3. Après l'approche basique ........................................................................................................................69 9. Les variables revisitées ..........................................................................................................................70 9.1. Variables internes .........................................................................................................................70 9.2. Manipuler les chaînes de caractères .................................................................................................87 9.3. Substitution de paramètres .............................................................................................................94 9.4. Typer des variables : declare ou typeset ......................................................................................... 102 9.5. Références indirectes .................................................................................................................. 104 9.6. $RANDOM : générer un nombre aléatoire ...................................................................................... 107 9.7. La construction en double parenthèse ............................................................................................. 117 10. Boucles et branchements .................................................................................................................... 119 10.1. Boucles .................................................................................................................................. 119 10.2. Boucles imbriquées ................................................................................................................... 130 10.3. Contrôle de boucles ................................................................................................................... 130 10.4. Tests et branchements ................................................................................................................ 133 11. Substitution de commandes ................................................................................................................. 141 12. Expansion arithmétique ...................................................................................................................... 147 13. Récréation ....................................................................................................................................... 148 Part 4. Commandes ...................................................................................................................................... 149 14. Commandes internes et intégrées .......................................................................................................... 159 14.1. Commandes de contrôle des jobs ................................................................................................. 184 15. Filtres externes, programmes et commandes ........................................................................................... 189 15.1. Commandes de base .................................................................................................................. 189 15.2. Commandes complexes ............................................................................................................. 194 15.3. Commandes de date et d'heure .................................................................................................... 203 15.4. Commandes d'analyse de texte .................................................................................................... 206 15.5. Commandes pour les fichiers et l'archivage .................................................................................... 226 15.6. Commandes de communications .................................................................................................. 242 15.7. Commandes de contrôle du terminal ............................................................................................. 257 15.8. Commandes mathématiques ....................................................................................................... 258 15.9. Commandes diverses ................................................................................................................. 266 16. Commandes système et d'administration ................................................................................................ 279 16.1. Analyser un script système ......................................................................................................... 307 Part 5. Thèmes avancés ................................................................................................................................. 309 17. Expressions rationnelles ..................................................................................................................... 310 17.1. Une brève introduction aux expressions rationnelles ........................................................................ 310 17.2. Remplacement ......................................................................................................................... 313 18. Documents en ligne ........................................................................................................................... 315 ii 18.1. Chaînes en ligne ....................................................................................................................... 324 19. Redirection d'E/S (entrées/sorties) ........................................................................................................ 327 19.1. Utiliser exec ............................................................................................................................ 330 19.2. Rediriger les blocs de code ......................................................................................................... 333 19.3. Applications ............................................................................................................................ 337 20. Sous-shells ...................................................................................................................................... 339 21. Shells restreints ................................................................................................................................ 344 22. Substitution de processus .................................................................................................................... 346 23. Fonctions ......................................................................................................................................... 349 23.1. Fonctions complexes et complexité des fonctions ............................................................................ 351 23.2. Variables locales ...................................................................................................................... 361 23.3. Récursion sans variables locales .................................................................................................. 363 24. Alias ............................................................................................................................................... 366 25. Constructeurs de listes ....................................................................................................................... 368 26. Tableaux ......................................................................................................................................... 371 27. /dev et /proc ................................................................................................................................ 395 27.1. /dev ..................................................................................................................................... 395 27.2. /proc ................................................................................................................................... 396 28. Des Zéros et des Nulls ....................................................................................................................... 402 29. Débogage ........................................................................................................................................ 405 30. Options ........................................................................................................................................... 414 31. Trucs et astuces ................................................................................................................................ 416 32. Écrire des scripts avec style ................................................................................................................. 423 32.1. Feuille de style non officielle d'écriture de scripts ........................................................................... 423 33. Divers ............................................................................................................................................. 426 33.1. Shells et scripts interactifs et non interactifs ................................................................................... 426 33.2. Précédence des opérateurs .......................................................................................................... 427 33.3. Scripts d'appel .......................................................................................................................... 429 33.4. Tests et comparaisons : alternatives .............................................................................................. 433 33.5. Récursion ................................................................................................................................ 433 33.6. « Coloriser » des scripts ............................................................................................................. 435 33.7. Optimisations .......................................................................................................................... 447 33.8. Astuces assorties ...................................................................................................................... 448 33.9. Problèmes de sécurité ................................................................................................................ 457 33.10. Problèmes de portabilité ........................................................................................................... 458 33.11. Scripts sous Windows .............................................................................................................. 458 34. Bash, version 2 et 3 ........................................................................................................................... 460 34.1. Bash, version 2 ......................................................................................................................... 460 34.2. Bash, version 3 ......................................................................................................................... 464 35. Notes finales .......................................................................................................................................... 467 35.1. Note de l'auteur .............................................................................................................................. 467 35.2. À propos de l'auteur ........................................................................................................................ 467 35.3. Où trouver de l'aide ......................................................................................................................... 467 35.4. Outils utilisés pour produire ce livre ................................................................................................... 467 35.5. Remerciements .............................................................................................................................. 468 35.6. Avis de non-responsabilité ............................................................................................................... 470 Bibliographie .............................................................................................................................................. 471 A. Contribution de scripts .............................................................................................................................. 472 B. Cartes de référence ................................................................................................................................... 611 C. Petit guide sur Sed et Awk ......................................................................................................................... 616 C.1. Sed ............................................................................................................................................... 616 C.2. Awk .............................................................................................................................................. 619 D. Codes de sortie ayant une signification particulière ......................................................................................... 622 E. Une introduction détaillée sur les redirections d'entrées/sorties .......................................................................... 623 F. Options en ligne de commande .................................................................................................................... 625 F.1. Options standards en ligne de commande .............................................................................................. 625 F.2. Options en ligne de commande de Bash ................................................................................................ 626 G. Fichiers importants ................................................................................................................................... 627 H. Répertoires système importants ................................................................................................................... 628 I. Localisation ............................................................................................................................................. 630 J. Commandes d'historique ............................................................................................................................. 633 K. Un exemple de fichier .bashrc ................................................................................................................ 634 L. Convertir des fichiers batch DOS en scripts shell ............................................................................................ 644 Guide avancé d'écriture des scripts Bash iii M. Exercices ............................................................................................................................................... 647 M.1. Analyse de scripts ........................................................................................................................... 647 M.2. Écriture de scripts ........................................................................................................................... 648 N. Historique des révisions ............................................................................................................................ 656 O. Sites miroirs ............................................................................................................................................ 659 P. Liste de choses à faire ................................................................................................................................ 660 Q. Droits d'utilisation .................................................................................................................................... 662 R. Copyright ............................................................................................................................................... 664 S. Table ASCII ............................................................................................................................................ 666 T. Index ..................................................................................................................................................... 667 Guide avancé d'écriture des scripts Bash iv Partie Part 1. Introduction Le shell est un interpréteur de commandes. Plus qu'une simple couche isolante entre le noyau du système d'exploitation et l'utilisateur, il est aussi un langage de programmation puissant. Un programme shell, appelé un script, est un outil facile à utiliser pour construire des applications en « regroupant » des appels système, outils, utilitaires et binaires compilés. Virtuellement, le ré- pertoire entier des commandes UNIX, des utilitaires et des outils est disponible à partir d'un script shell. Si ce n'était pas suffisant, les commandes shell internes, telles que les constructions de tests et de boucles, donnent une puissance et une flexibilité supplé- mentaires aux scripts. Les scripts shell conviennent particulièrement bien pour les tâches d'administration du système et pour d'autres routines répétitives ne réclamant pas les particularités d'un langage de programmation structuré complet. 1Ils sont connus sous le nom de commandes intégrées159, c'est-à-dire des fonctionnalités internes au shell. 2Bien que la récursion est possible dans un script shell362, elle tend à être lente et son implémentation est souvent le résultat d'un code sale363. Chapitre 1. Pourquoi la programmation Shell ? Aucun langage de programmation n'est parfait. Il n'existe même pas un langage meilleur que d'autre ; il n'y a que des langages en adéquation ou peu conseillés pour des buts particuliers. -- Herbert Mayer Une connaissance fonctionnelle de la programmation shell est essentielle à quiconque souhaite devenir efficace en administration de système, même pour ceux qui ne pensent pas avoir à écrire un script un jour. Pensez qu'au démarrage de la machine Linux, des scripts shell du répertoire /etc/rc.d sont exécutés pour restaurer la configuration du système et permettre la mise en fonction- nement des services. Une compréhension détaillée de ces scripts de démarrage est importante pour analyser le comportement d'un système, et éventuellement le modifier. Écrire des scripts shell n'est pas difficile à apprendre car, d'une part, les scripts peuvent être construits par petites sections et, d'autre part, il n'y a qu'un assez petit nombre d'opérateurs et d'options 1 spécifiques au shell à connaître. La syntaxe est simple et directe, similaire à une suite d'appels de différents utilitaires en ligne de commande et il n'existe que peu de « règles » à apprendre. La plupart des petits scripts fonctionnent du premier coup et le débogage, même des plus longs, est assez simple. Un script shell est une méthode « rapide et sale » pour prototyper une application complexe. Avoir même un sous-ensemble limité de fonctionnalités dans un script shell est souvent une première étape utile lors d'un projet de développement. De cette façon, la structure de l'application peut être testée et les problèmes majeurs trouvés avant d'effectuer le codage uploads/Industriel/ abs-5-1-04.pdf

  • 16
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager