scripts shell linux et unix - eyrolles.com · le shell unix . . . . . . . . . . . . . . . . . . . ....
Post on 14-Sep-2018
263 Views
Preview:
TRANSCRIPT
Scriptsshell
Linux et UnixAvec 30 scripts prêts à l’emploi
C h r i s t o p h e B l a e s s
2e édition
© Groupe Eyrolles, 2008, 2012, ISBN : 978-2-212-13579-4
Table des matières
CHAPITRE 1
Principes des scripts shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Le shell Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Pourquoi écrire un script shell ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Outils nécessaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Exécution d’un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Invocation de l’interpréteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Appel direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Ligne shebang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
CHAPITRE 2
Programmation shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Premier aperçu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Premier script, rm_secure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Analyse détaillée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Exemple d’exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Shells Livre Page VII Mercredi, 5. septembre 2012 2:23 14
Scripts shell Linux et UnixVIII
CHAPITRE 3
Évaluation d’expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Précisions sur l’opérateur $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Calcul arithmétique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Invocation de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Portées et attributs des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Paramètres positionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Paramètres spéciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Protection des expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Protection par le caractère backslash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Protection par apostrophes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Protection par guillemets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Évaluation explicite d’une expression . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
CHAPITRE 4
Éléments de programmation shell . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Commandes et code de retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Commande simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Listes de pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Commandes composées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Redirections d’entrées-sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Entrées-sorties standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Redirection des entrées et sorties standards . . . . . . . . . . . . . . . . . . . . . . . . 91Redirections avancées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Sélection d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104Itérations d’instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Shells Livre Page VIII Mercredi, 5. septembre 2012 2:23 14
Table des matières IX
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
CHAPITRE 5
Commandes, variables et utilitaires système . . . . . . . . . . . . . . . 131
Commandes internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Comportement du shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Exécution des scripts et commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133Interactions avec le système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Arguments en ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Variables internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Commandes externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
CHAPITRE 6
Programmation shell avancée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Processus fils, parallélisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Arrière-plan et démons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Envoi d’un signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Réception d’un signal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Attente de signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Communication entre processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Entrées-sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
tee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171xargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Interface utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
stty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174tput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Déboguer un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Virgule flottante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Shells Livre Page IX Mercredi, 5. septembre 2012 2:23 14
Scripts shell Linux et UnixX
CHAPITRE 7
Expressions régulières – Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Expressions régulières simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Expressions rationnelles étendues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Outil grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Recherche récursive avec find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
CHAPITRE 8
Sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Utilisation de Sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197Fonctionnement de Sed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Commandes Sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
CHAPITRE 9
Awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Fonctionnement de Awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Les motifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Les actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Enregistrements et champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Les enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Les champs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Retour sur les affichages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Shells Livre Page X Mercredi, 5. septembre 2012 2:23 14
Table des matières XI
CHAPITRE 10
Bonne écriture d’un script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Présentation générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Ligne shebang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233En-tête du fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Commentaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Les variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Noms des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Utilisation des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Variables des fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Arguments en ligne de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Codes de retour. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Messages d’erreur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Messages de débogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
En-tête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Bibliothèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
ANNEXE A
Scripts complets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Administration système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Générateur de mots de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243Exécution d’un ping vers un ensemble de serveurs . . . . . . . . . . . . . . . . . . 244Supervision distante d’un petit parc de machines . . . . . . . . . . . . . . . . . . . 245Image de l’activité système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Synchronisation de répertoires distants . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Fichiers et bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Sauvegarde quotidienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Renommage d’un ensemble de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Scan et archivage de documents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Création d’une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Consultation d’une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Shells Livre Page XI Mercredi, 5. septembre 2012 2:23 14
Scripts shell Linux et UnixXII
Scripts divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Calcul de prix et de TVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258Générateur aléatoire suivant une loi normale . . . . . . . . . . . . . . . . . . . . . . . 260Calcul et affichage d’histogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262Préparation d’un script d’installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264Présentation d’un fichier script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
ANNEXE B
QCM d’évaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Énoncés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
ANNEXE C
Solutions des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Chapitre 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Chapitre 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Chapitre 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Chapitre 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Chapitre 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Chapitre 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Chapitre 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
ANNEXE D
Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Livres et articles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Sites de référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Norme Single UNIX Specification Version 3 . . . . . . . . . . . . . . . . . . . . . . 290Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Korn shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Pdksh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Tcsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291Zsh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291Sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Shells Livre Page XII Mercredi, 5. septembre 2012 2:23 14
top related