Guide avanc� d'�criture des scripts Bash

Une exploration en profondeur de l'art de la programmation shell

Mendel Cooper

5.3

11 mai 2008

Historique des versions
Version 5.1 10 novembre 2007 mc
Version 'LINGONBERRY' : Mise � jour mineure.
Version 5.2 16 mars 2008 mc
Version 'SILVERBERRY' : Mise � jour importante.
Version 5.2.fr.1.0 10 mai 2007 gl
Mise � jour de la traduction fran�aise.

R�sum�

Ce tutoriel ne suppose aucune connaissance de la programmation de scripts, mais permet une progression rapide vers un niveau interm�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.


Pour Anita, la source de toute magie

Table des mati�res

Part 1. Introduction
1. Pourquoi la programmation Shell ?
2. Lancement avec un � #! �
2.1. Appeler le script
2.2. Exercices pr�liminaires
Part 2. Bases
3. Caract�res sp�ciaux
4. Introduction aux variables et aux param�tres
4.1. Substitution de variable
4.2. Affectation de variable
4.3. Les variables Bash ne sont pas typ�es
4.4. Types sp�ciaux de variables
5. Guillemets et apostrophes
5.1. Placer les variables entre guillemets
5.2. �chappement
6. Sortie et code de sortie (ou d'�tat)
7. Tests
7.1. Constructions de tests
7.2. Op�rateurs de test de fichiers
7.3. Autres op�rateurs de comparaison
7.4. Tests if/then imbriqu�s
7.5. Tester votre connaissance des tests
8. Op�rations et sujets en relation
8.1. Op�rateurs
8.2. Constantes num�riques
Part 3. Apr�s l'approche basique
9. Les variables revisit�es
9.1. Variables internes
9.2. Manipuler les cha�nes de caract�res
9.3. Substitution de param�tres
9.4. Typer des variables : declare ou typeset
9.5. R�f�rences indirectes
9.6. $RANDOM : g�n�rer un nombre al�atoire
9.7. La construction en double parenth�se
10. Boucles et branchements
10.1. Boucles
10.2. Boucles imbriqu�es
10.3. Contr�le de boucles
10.4. Tests et branchements
11. Substitution de commandes
12. Expansion arithm�tique
13. R�cr�ation
Part 4. Commandes
14. Commandes internes et int�gr�es
14.1. Commandes de contr�le des jobs
15. Filtres externes, programmes et commandes
15.1. Commandes de base
15.2. Commandes complexes
15.3. Commandes de date et d'heure
15.4. Commandes d'analyse de texte
15.5. Commandes pour les fichiers et l'archivage
15.6. Commandes de communications
15.7. Commandes de contr�le du terminal
15.8. Commandes math�matiques
15.9. Commandes diverses
16. Commandes syst�me et d'administration
16.1. Analyser un script syst�me
Part 5. Th�mes avanc�s
17. Expressions rationnelles
17.1. Une br�ve introduction aux expressions rationnelles
17.2. Remplacement
18. Documents en ligne
18.1. Cha�nes en ligne
19. Redirection d'E/S (entr�es/sorties)
19.1. Utiliser exec
19.2. Rediriger les blocs de code
19.3. Applications
20. Sous-shells
21. Shells restreints
22. Substitution de processus
23. Fonctions
23.1. Fonctions complexes et complexit� des fonctions
23.2. Variables locales
23.3. R�cursion sans variables locales
24. Alias
25. Constructeurs de listes
26. Tableaux
27. /dev et /proc
27.1. /dev
27.2. /proc
28. Des Z�ros et des Nulls
29. D�bogage
30. Options
31. Trucs et astuces
32. �crire des scripts avec style
32.1. Feuille de style non officielle d'�criture de scripts
33. Divers
33.1. Shells et scripts interactifs et non interactifs
33.2. Pr�c�dence des op�rateurs
33.3. Scripts d'appel
33.4. Tests et comparaisons : alternatives
33.5. Un script s'appelant lui-m�me (r�cursion)
33.6. � Coloriser � des scripts
33.7. Optimisations
33.8. Astuces assorties
33.9. Probl�mes de s�curit�
33.10. Probl�mes de portabilit�
33.11. Scripts sous Windows
34. Bash, version 2 et 3
34.1. Bash, version 2
34.2. Bash, version 3
35. Notes finales
35.1. Note de l'auteur
35.2. � propos de l'auteur
35.3. O� trouver de l'aide
35.4. Outils utilis�s pour produire ce livre
35.5. Remerciements
35.6. Avis de non-responsabilit�
Bibliographie
A. Contribution de scripts
B. Cartes de r�f�rence
C. Petit guide sur Sed et Awk
C.1. Sed
C.2. Awk
D. Codes de sortie ayant une signification particuli�re
E. Une introduction d�taill�e sur les redirections d'entr�es/sorties
F. Options en ligne de commande
F.1. Options standards en ligne de commande
F.2. Options en ligne de commande de Bash
G. Fichiers importants
H. R�pertoires syst�me importants
I. Localisation
J. Commandes d'historique
K. Un exemple de fichier .bashrc
L. Convertir des fichiers batch DOS en scripts shell
M. Exercices
M.1. Analyse de scripts
M.2. �criture de scripts
N. Historique des r�visions
O. Sites miroirs
P. Liste de choses � faire
Q. Droits d'utilisation
R. Copyright
S. Table ASCII
T. Index

Liste des tableaux

14.1. Identifiants de jobs
30.1. Options de bash
33.1. Pr�c�dence des op�rateurs
33.2. Nombres repr�sentant les couleurs des s�quences d'�chappement
B.1. Variables sp�ciales du shell
B.2. Op�rateurs de test : comparaison binaire
B.3. Op�rateurs de test : fichiers
B.4. Substitution et expansion de param�tres
B.5. Op�rations sur les cha�nes
B.6. Constructions diverses
C.1. Op�rateurs sed basiques
C.2. Exemples d'op�rateurs sed
D.1. Codes de sortie r�serv�s
L.1. Mots cl�s / variables / op�rateurs des fichiers batch, et leur �quivalent shell
L.2. Commandes DOS et leur �quivalent UNIX
N.1. Historique des r�visions

Liste des exemples

2.1. cleanup : Un script pour nettoyer les journaux de trace dans /var/log
2.2. cleanup : Un script de nettoyage am�lior�
2.3. cleanup : Une version am�lior�e et g�n�ralis�e des scripts pr�c�dents
3.1. Blocs de code et redirection d'entr�es/sorties
3.2. Sauver la sortie d'un bloc de code dans un fichier
3.3. Ex�cuter une boucle en t�che de fond
3.4. Sauvegarde de tous les fichiers modifi�s dans les derni�res 24 heures
4.1. Affectation de variable et substitution
4.2. Affectation basique de variable
4.3. Affectation de variable, basique et �labor�e
4.4. Entier ou cha�ne?
4.5. Param�tres positionnels
4.6. wh, recherche d'un nom de domaine avec whois
4.7. Utiliser shift
5.1. Afficher des variables bizarres
5.2. Caract�res d'�chappement
6.1. exit / code de sortie
6.2. Inverser une condition en utilisant !
7.1. O� est le vrai?
7.2. �quivalences de test, /usr/bin/test, [ ], et /usr/bin/[
7.3. Tests arithm�tiques en utilisant (( ))
7.4. Test de liens cass�s
7.5. Comparaisons de nombres et de cha�nes de caract�res
7.6. V�rification si une cha�ne est nulle
7.7. zmore
8.1. Plus grand diviseur commun
8.2. Utiliser des op�rations arithm�tiques
8.3. Tests de conditions compos�es en utilisant && et ||
8.4. Repr�sentation des constantes num�riques
9.1. $IFS et espaces blancs
9.2. Saisie avec d�lai
9.3. Encore une fois, saisie avec d�lai
9.4. read avec d�lai
9.5. Suis-je root ?
9.6. arglist : Affichage des arguments avec $* et $@
9.7. Comportement de $* et $@ incoh�rent
9.8. $* et $@ lorsque $IFS est vide
9.9. Variable tiret bas
9.10. Ins�rer une ligne blanche entre les paragraphes d'un fichier texte
9.11. G�n�rer � al�atoirement � une cha�ne de huit caract�res
9.12. Convertir des formats de fichiers graphiques avec une modification du nom du fichier
9.13. Convertir des fichiers audio en ogg
9.14. �muler getopt
9.15. Autres moyens d'extraire des sous-cha�nes
9.16. Utiliser la substitution et les messages d'erreur
9.17. Substitution de param�tres et messages d'� usage �
9.18. Longueur d'une variable
9.19. Correspondance de mod�le dans la substitution de param�tres
9.20. Renommer des extensions de fichiers :
9.21. Utiliser la concordance de mod�les pour analyser des cha�nes de caract�res diverses
9.22. Mod�les correspondant au pr�fixe ou au suffixe d'une cha�ne de caract�res
9.23. Utiliser declare pour typer des variables
9.24. R�f�rences indirectes aux variables
9.25. Passer une r�f�rence indirecte � awk
9.26. G�n�rer des nombres al�atoires
9.27. Piocher une carte au hasard dans un tas
9.28. Simulation � Brownian Motion �
9.29. Un nombre au hasard entre deux valeurs
9.30. Lancement d'un seul d� avec RANDOM
9.31. R�initialiser RANDOM
9.32. Nombres pseudo-al�atoires, en utilisant awk
9.33. Manipulation, � la fa�on du C, de variables
10.1. Des boucles for simples
10.2. Boucle for avec deux param�tres dans chaque �l�ment de la [liste]
10.3. Fileinfo : op�rer sur une liste de fichiers contenue dans une variable
10.4. Agir sur des fichiers � l'aide d'une boucle for
10.5. in [liste] manquant dans une boucle for
10.6. G�n�rer la [liste] dans une boucle for avec la substitution de commandes
10.7. Un rempla�ant de grep pour les fichiers binaires
10.8. Afficher tous les utilisateurs du syst�me
10.9. Rechercher les auteurs de tous les binaires d'un r�pertoire
10.10. Afficher les liens symboliques dans un r�pertoire
10.11. Liens symboliques dans un r�pertoire, sauv�s dans un fichier
10.12. Une boucle for � la C
10.13. Utiliser efax en mode batch
10.14. Simple boucle while
10.15. Une autre boucle while
10.16. Boucle while avec de multiples conditions
10.17. Syntaxe � la C pour une boucle while
10.18. Boucle until
10.19. Boucles imbriqu�es
10.20. Effets de break et continue dans une boucle
10.21. Sortir de plusieurs niveaux de boucle
10.22. Continuer � un plus haut niveau de boucle
10.23. Utiliser continue N dans une t�che courante
10.24. Utiliser case
10.25. Cr�er des menus en utilisant case
10.26. Utiliser la substitution de commandes pour g�n�rer la variable case
10.27. Simple correspondance de cha�ne
10.28. V�rification d'une entr�e alphab�tique
10.29. Cr�er des menus en utilisant select
10.30. Cr�er des menus en utilisant select dans une fonction
11.1. Trucs de script stupides
11.2. G�n�rer le contenu d'une variable � partir d'une boucle
11.3. D�couvrir des anagrammes
14.1. Un script ex�cutant plusieurs instances de lui-m�me
14.2. printf en action
14.3. Affectation d'une variable, en utilisant read
14.4. Qu'arrive-t'il quand read n'a pas de variable
14.5. Lecture de plusieurs lignes par read
14.6. D�tecter les fl�ches de direction
14.7. Utiliser read avec la redirection de fichier
14.8. Probl�mes lors de la lecture d'un tube
14.9. Modifier le r�pertoire courant
14.10. Laisser let faire un peu d'arithm�tique.
14.11. Montrer l'effet d'eval
14.12. Afficher les param�tres en ligne de commande
14.13. Forcer une d�connexion
14.14. Une version de rot13
14.15. Utiliser eval pour forcer une substitution de variable dans un script Perl
14.16. Utiliser set avec les param�tres de position
14.17. Inverser les param�tres de position
14.18. R�affecter les param�tres de position
14.19. � D�configurer � une variable
14.20. Utiliser export pour passer une variable � un script awk embarqu�
14.21. Utiliser getopts pour lire les options/arguments pass�s � un script
14.22. � Inclure � un fichier de donn�es
14.23. Un script (inutile) qui se charge lui-m�me
14.24. Effets d'exec
14.25. Un script lan�ant exec sur lui-m�me
14.26. Attendre la fin d'un processus avant de continuer
14.27. Un script qui se tue lui-m�me
15.1. Utilisation de ls pour cr�er une liste de fichiers � graver sur un CDR
15.2. Hello or Good-bye
15.3. Badname �limine dans le r�pertoire courant les fichiers dont le nom contient des caract�res incorrects et des espaces blancs.
15.4. Effacer un fichier par son num�ro d'inode
15.5. Fichier de traces utilisant xargs pour surveiller les journaux syst�me
15.6. Copier les fichiers du r�pertoire courant vers un autre r�pertoire en utilisant xargs
15.7. Tuer des processus par leur nom
15.8. Analyse de la fr�quence des mots en utilisant xargs
15.9. Utiliser expr
15.10. Utiliser date
15.11. Calcul de Date
15.12. Analyse de fr�quence d'apparition des mots
15.13. Quels fichiers sont des scripts ?
15.14. G�n�rer des nombres al�atoires de dix chiffres
15.15. Utiliser tail pour surveiller le journal des traces syst�me
15.16. Afficher les lignes From des courriels stock�s sous forme de fichiers
15.17. �muler grep dans un script
15.18. Solutionneur de mots crois�s
15.19. Rechercher des d�finitions dans le dictionnaire Webster de 1913
15.20. Chercher les mots dans une liste pour tester leur validit�
15.21. toupper : Transforme un fichier en majuscule.
15.22. lowercase : Change tous les noms de fichier du r�pertoire courant en minuscule.
15.23. du : Convertit les fichiers texte DOS vers UNIX.
15.24. rot13 : rot13, cryptage ultra-faible.
15.25. G�n�rer des �nigmes � Crypto-Citations �
15.26. Affichage d'un fichier format�.
15.27. Utiliser column pour formater l'affichage des r�pertoires
15.28. nl : un script d'autonum�rotation.
15.29. manview : Visualisation de pages man format�es
15.30. Utiliser cpio pour d�placer un r�pertoire complet
15.31. D�baller une archive rpm
15.32. Supprimer les commentaires des programmes C
15.33. Explorer /usr/X11R6/bin
15.34. Une commande strings � am�lior�e �
15.35. Utiliser cmp pour comparer deux fichiers � l'int�rieur d'un script.
15.36. basename et dirname
15.37. Un script qui se copie lui-m�me en sections
15.38. V�rifier l'int�grit� d'un fichier
15.39. D�coder des fichier cod�s avec uudecode
15.40. Trouver o� d�noncer un spammeur
15.41. Analyser le domaine d'un courrier ind�sirable
15.42. Obtenir la cote d'une valeur de bourse
15.43. Mettre � jour FC4
15.44. Utilisation de ssh
15.45. Un script qui envoie son fichier source
15.46. Paiement mensuel sur une hypoth�que
15.47. Conversion de base
15.48. Appeler bc en utilisant un document en ligne
15.49. Calculer PI
15.50. Convertir une valeur d�cimale en hexad�cimal
15.51. Factorisation
15.52. Calculer l'hypot�nuse d'un triangle
15.53. Utiliser seq pour g�n�rer l'incr�ment d'une boucle
15.54. Compteur de lettres
15.55. Utiliser getopt pour analyser les param�tres de la ligne de commande
15.56. Un script qui se copie lui-m�me
15.57. S'exercer � dd
15.58. Capturer une saisie
15.59. Effacer les fichiers de fa�on s�re
15.60. G�n�rateur de nom de fichier
15.61. Convertir des m�tres en miles
15.62. Utiliser m4
16.1. Configurer un nouveau mot de passe
16.2. Configurer un caract�re d'effacement
16.3. Mot de passe secret : D�sactiver l'�cho du terminal
16.4. D�tection de l'appui sur une touche
16.5. V�rification d'identd sur un serveur distant
16.6. pidof aide � la suppression d'un processus
16.7. V�rifier une image
16.8. Cr�ation d'un syst�me de fichiers dans un fichier
16.9. Ajoute un nouveau disque dur
16.10. Utiliser umask pour cacher un fichier en sortie
16.11. killall, � partir de /etc/rc.d/init.d
18.1. broadcast : envoie des messages � chaque personne connect�e
18.2. fichierstupide : Cr�e un fichier stupide de deux lignes
18.3. Message multi-lignes en utilisant cat
18.4. Message multi-lignes, aves les tabulations supprim�es
18.5. Document en ligne avec une substitution de param�tre
18.6. T�l�charger un ensemble de fichiers dans le r�pertoire de r�cup�ration Sunsite
18.7. Substitution de param�tres d�sactiv�e
18.8. Un script g�n�rant un autre script
18.9. Documents en ligne et fonctions
18.10. Document en ligne � anonyme �
18.11. D�commenter un bloc de code
18.12. Un script auto-document�
18.13. Ajouter une ligne au d�but d'un fichier
18.14. Analyser une bo�te mail
19.1. Rediriger stdin en utilisant exec
19.2. Rediriger stdout en utilisant exec
19.3. Rediriger � la fois stdin et stdout dans le m�me script avec exec
19.4. �viter un sous-shell
19.5. Boucle while redirig�e
19.6. Autre forme de boucle while redirig�e
19.7. Boucle until redirig�e
19.8. Boucle for redirig�e
19.9. Rediriger la boucle for (� la fois stdin et stdout)
19.10. Rediriger un test if/then
19.11. Fichier de donn�es nom.donn�es pour les exemples ci-dessus
19.12. Enregistrer des �v�nements
20.1. �tendue des variables dans un sous-shell
20.2. Lister les profils utilisateurs
20.3. Ex�cuter des processus en parall�le dans les sous-shells
21.1. Ex�cuter un script en mode restreint
23.1. Fonctions simples
23.2. Fonction prenant des param�tres
23.3. Fonctions et arguments en ligne de commande pass�s au script
23.4. Passer une r�f�rence indirecte � une fonction
23.5. D�r�f�rencer un param�tre pass� � une fonction
23.6. De nouveau, d�r�f�rencer un param�tre pass� � une fonction
23.7. Maximum de deux nombres
23.8. Convertir des nombres en chiffres romains
23.9. Tester les valeurs de retour importantes dans une fonction
23.10. Comparer deux grands entiers
23.11. Vrai nom pour un utilisateur
23.12. Visibilit� de la variable locale
23.13. D�monstration d'une fonction r�cursive simple
23.14. R�cursion en utilisant une variable locale
23.15. La s�quence de Fibonacci
23.16. Les tours d'Hanoi
24.1. Alias � l'int�rieur d'un script
24.2. unalias : Configurer et supprimer un alias
25.1. Utiliser une liste ET pour tester des arguments de la ligne de commande
25.2. Un autre test des arguments de la ligne de commande en utilisant une liste and
25.3. Utiliser des listes OR en combinaison avec une liste ET
26.1. Utilisation d'un tableau simple
26.2. Formatage d'un po�me
26.3. Op�rations de cha�nes sur des tableaux
26.4. Charger le contenu d'un script dans un tableau
26.5. Quelques propri�t�s sp�ciales des tableaux
26.6. Des tableaux vides et des �l�ments vides
26.7. Initialiser des tableaux
26.8. Copier et concat�ner des tableaux
26.9. Plus sur la concat�nation de tableaux
26.10. Le tri bulle : Bubble Sort
26.11. Tableaux imbriqu�s et r�f�rences indirectes
26.12. Crible d'�ratosthene
26.13. Crible d'�ratosthene, optimis�
26.14. �muler une pile
26.15. Application complexe des tableaux Exploration d'une �trange s�rie math�matique
26.16. Simuler un tableau � deux dimensions, puis son test
27.1. Utiliser /dev/tcp pour corriger des probl�mes
27.2. Trouver le processus associ� � un PID
27.3. �tat de la connexion
28.1. Cacher le cookie jar
28.2. Cr�er un fichier de swap en utilisant /dev/zero
28.3. Cr�er un disque ram
29.1. Un script bogu�
29.2. Mot cl� manquant
29.3. test24, un autre script bogu�
29.4. Tester une condition avec un assert
29.5. R�cup�rer la sortie
29.6. Nettoyage apr�s un Control-C
29.7. Tracer une variable
29.8. Lancer plusieurs processus (sur une machine SMP)
31.1. Les comparaisons d'entiers et de cha�nes ne sont pas �quivalentes
31.2. Probl�mes des sous-shell
31.3. Envoyer la sortie de echo dans un tube pour un read
33.1. Script d'appel
33.2. Un script d'appel l�g�rement plus complexe
33.3. Un script d'appel g�n�rique qui �crit dans un fichier de traces
33.4. Un script d'appel autour d'un script awk
33.5. Un script d'appel autour d'un autre script awk
33.6. Perl inclus dans un script Bash
33.7. Combinaison de scripts Bash et Perl
33.8. Un script (inutile) qui s'appelle r�cursivement
33.9. Un script (utile) qui s'appelle r�cursivement
33.10. Un autre script (utile) qui s'appelle r�cursivement
33.11. Une base de donn�es d'adresses � coloris�e �
33.12. Dessiner une bo�te
33.13. Afficher du texte color�
33.14. Un jeu de � courses de chevaux �
33.15. Astuce de valeur de retour
33.16. Une astuce permettant de renvoyer plus d'une valeur de retour
33.17. Passer et renvoyer un tableau
33.18. Un peu de fun avec des anagrammes
33.19. Widgets appel�s � partir d'un script shell
34.1. Expansion de cha�ne de caract�res
34.2. R�f�rences de variables indirectes - la nouvelle fa�on
34.3. Simple application de base de donn�es, utilisant les r�f�rences de variables indirectes
34.4. Utiliser des tableaux et autres astuces pour g�rer quatre mains al�atoires dans un jeu de cartes
A.1. mailformat : Formater un courrier �lectronique
A.2. rn : Un utilitaire simple pour renommer des fichiers
A.3. blank-rename : Renommer les fichiers dont le nom contient des espaces
A.4. encryptedpw : Charger un fichier sur un site ftp, en utilisant un mot de passe crypt� en local
A.5. copy-cd : Copier un CD de donn�es
A.6. collatz : S�ries de Collatz
A.7. days-between : Calculer le nombre de jours entre deux dates
A.8. makedict : Cr�er un dictionnaire
A.9. soundex : Conversion phon�tique
A.10. � life : Jeu de la Vie �
A.11. Fichier de donn�es pour le Jeu de la Vie
A.12. behead: Supprimer les en-t�tes des courriers �lectroniques et des nouvelles
A.13. ftpget: T�l�charger des fichiers via ftp
A.14. password: G�n�rer des mots de passe al�atoires de 8 caract�res
A.15. fifo: Faire des sauvegardes journali�res, en utilisant des tubes nomm�s
A.16. primes: G�n�rer des nombres premiers en utilisant l'op�rateur modulo
A.17. tree: Afficher l'arborescence d'un r�pertoire
A.18. tree2 : autre script tree
A.19. string: Manipuler les cha�nes de caract�res comme en C
A.20. Informations sur un r�pertoire
A.21. obj-oriented: Bases de donn�es orient�es objet
A.22. Biblioth�que de fonctions de hachage
A.23. Coloriser du texte en utilisant les fonctions de hachage
A.24. Encore plus sur les fonctions de hachage
A.25. Monter des p�riph�riques de stockage USB
A.26. Convertir en HTML
A.27. Pr�server les weblogs
A.28. Prot�ger les cha�nes litt�rales
A.29. Ne pas prot�ger les cha�nes litt�rales
A.30. Identification d'un spammer
A.31. Chasse aux spammeurs
A.32. Rendre wget plus facile � utiliser
A.33. Un script de podcasting
A.34. Sauvegarde de nuit pour un disque firewire
A.35. Une commande cd �tendue
A.36. Un script de configuration d'une carte son
A.37. Localise les paragraphes de division dans un fichier texte
A.38. Tri d'insertion
A.39. Un g�n�rateur de fichiers pad pour les auteurs de shareware
A.40. P�tales autour d'une rose
A.41. Quacky : un jeu de mots de type Perquackey
A.42. Un outil de r�solution g�n�ral
A.43. Basics Reviewed
C.1. Compteur sur le nombre d'occurences des lettres
K.1. Exemple de fichier .bashrc
L.1. VIEWDATA.BAT : Fichier Batch DOS
L.2. viewdata.sh : Conversion du script shell VIEWDATA.BAT
P.1. Afficher l'environnement du serveur
S.1. Un script qui g�n�re une table ASCII