Académique Documents
Professionnel Documents
Culture Documents
1. Dans ce livre, nous utiliserons le terme Unix pour désigner non seulement les variantes commercia-
les du système Unix original, comme Solaris, Mac OS X et HP-UX, mais également les systèmes
libres apparentés, comme GNU/Linux et les différents systèmes BSD, BSD/OS, NetBSD, FreeBSD et
OpenBSD.
2. Cette approche a été popularisée par l’ouvrage Software Tools, publié par Addison-Wesley.
xii Préface
puisse parfaitement convenir pour couper une petite branche ou pour une petite sculp-
ture, il est complètement inadapté à la construction d’une niche ou d’une mangeoire à
oiseaux, par exemple. Pour cela, vous utiliserez des outils spécialisés, comme un
marteau, une scie, une pince ou un rabot. Il en va de même pour les problèmes de
programmation : il vaut mieux utiliser des outils logiciels spécialisés.
Notre public
Nous avons écrit ce livre pour les utilisateurs et pour les développeurs travaillant dans
un environnement Unix, qui ont besoin d’écrire des scripts shell. Vous pouvez, par
exemple, être un étudiant en informatique disposant de votre premier compte sur le
système Unix de votre université et vouloir apprendre ce que vous pouvez faire avec, qui
serait impossible sous Windows (en ce cas, vous devrez sûrement écrire plusieurs scripts
pour adapter votre environnement à votre goût). Vous pouvez également être un
nouvel administrateur système et devoir écrire des programmes spécialisés pour votre
société ou votre établissement (pour, par exemple, gérer les connexions ou facturer
l’utilisation des ressources). Vous pouvez même être un développeur Mac chevronné,
basculant dans le merveilleux nouveau monde de Mac OS X, où l’installation des
programmes a lieu via des scripts shell. Qui que vous soyez, si vous souhaitez savoir
comment écrire des scripts shell, ce livre est fait pour vous. Vous y apprendrez :
3. Une version 2004 de la norme a été publiée après la finalisation de ce livre, mais les différences par
rapport à l’édition 2001 ne concernent pas l’écriture des scripts shell.
4. Vous trouverez une Foire Aux Questions (FAQ) concernant IEEE Std. 1003.1-2001 sur la page http://
www.opengroup.org/austin/papers/posix_faq.html. La page http://www.opengroup.org/austin/papers/bac-
kgrounder.html contient quelques fondements de la norme.
xiv Préface
Prérequis
Vous devriez déjà savoir :
• vous connecter à votre système Unix ;
• lancer des programmes à partir de la ligne de commande ;
• créer des enchaînements simples de commandes et utiliser des redirecteurs sim-
ples d’entrées/sorties, comme < et > ;
• placer des travaux à l’arrière-plan avec & ;
• créer et modifier des fichiers ;
• rendre les scripts exécutables avec chmod.
En outre, si vous comptez essayer les exemples que nous donnons en tapant les
commandes sur votre terminal (ou, plus probablement, dans un émulateur de
terminal), nous vous conseillons d’utiliser un shell POSIX, comme une version récente
de ksh93 bash ou zsh. Attention, le /bin/sh des systèmes Unix commerciaux peut ne pas
être totalement conforme à POSIX.
Vous trouverez au chapitre 14 les URL permettant de télécharger ksh93, bash et zsh.
Plan de l’ouvrage
Nous conseillons de lire ce livre dans l’ordre, car chaque chapitre repose sur les concepts
et les explications donnés dans les chapitres qui le précèdent. Voici les résumés de
chaque chapitre :
Chapitre 1, Fondements
Nous dresserons un bref historique d’Unix et nous présenterons notamment l’envi-
ronnement informatique des laboratoires Bell, où Unix a été conçu, qui a motivé
l’essentiel de la philosophie des outils logiciels. Dans ce chapitre, nous présenterons
également les principes que doit respecter un bon outil logiciel et qui sont ensuite
développés tout au long de ce livre.
Plan de l’ouvrage xv
Chapitre 2, Introduction
Ce chapitre marque le début de notre exposé. Nous commencerons par décrire les
langages compilés et les langages de scripts, avec leurs différences. Puis, nous
présenterons les bases minimales de l’écriture des scripts shell à l’aide de deux
scripts simples mais utiles. Cette présentation comprend les commandes, les
options, les paramètres, les variables du shell, l’affichage avec echo et printf, les
redirections d’entrées/sorties de base, la recherche des commandes, l’accès aux para-
mètres à partir d’un script et la trace d’exécution d’un script. Nous concluerons ce
chapitre en étudiant l’internationalisation et la localisation, problèmes prenant
une part croissante dans le « village global » actuel.
Chapitre 3, Recherches et substitutions
Dans ce chapitre, nous introduirons la recherche de texte à l’aide des expressions
régulières. Nous expliquerons également comment modifier et extraire du texte.
Ces opérations fondamentales forment la base de nombreux scripts shell.
Chapitre 4, Outils pour traiter le texte
Nous y décrirons un certain nombre d’outils de traitement du texte utilisés cons-
tamment dans les scripts. Deux des outils les plus importants présentés ici sont sort
et uniq, qui permettent d’organiser les données et de réduire leur volume. Nous
étudierons également comment reformater des paragraphes, compter des unités
textuelles, imprimer des fichiers et récupérer les premières ou les dernières lignes
d’un fichier.
Chapitre 5, De la puissance des pipes
Dans ce chapitre, nous présenterons plusieurs petits scripts démontrant comment
la combinaison d’utilitaires simples permet d’obtenir des traitements puissants et,
ce qui est important, plus souples d’emploi. Ce chapitre est essentiellement un
recueil de problèmes et de leurs solutions. Son thème directeur est que toutes ces
solutions sont formées d’enchaînements de commandes.
Chapitre 6, Variables, structures conditionnelles et boucles
Dans ce chapitre, nous aborderons le reste du langage shell. Dans celui-ci, nous
étudierons les variables et l’arithmétique du shell, le concept important de code de
retour et comment prendre des décisions et répéter des traitements. Nous termine-
rons par une présentation des fonctions shell.
Chapitre 7, Entrées, sorties, fichiers et évaluation des commandes
Ce chapitre termine la description du shell en s’intéressant aux entrées/sorties, aux
différentes substitutions effectuées par le shell, à l’utilisation des apostrophes
simples et doubles, à l’ordre d’évaluation de la ligne de commande et aux
commandes internes du shell.
Chapitre 8, Scripts en production
Nous présenterons des combinaisons d’outils Unix permettant de créer des traite-
ments textuels plus complexes. Les programmes de ce chapitre sont plus longs que
ceux du chapitre 5, mais encore suffisamment courts pour être compris en quelques
minutes. Pourtant, ils accomplissent des tâches qu’il serait très difficile de réaliser
avec des langages conventionnels comme C, C++ ou Java+.
xvi Préface
Conventions utilisées
Il est sous-entendu qu’après avoir saisi au clavier une commande shell, vous pressiez la
touche Entrée. Sur certains claviers, rien n’est écrit sur la touche Entrée : quoi qu’il en
soit, c’est la grosse touche située à droite.
Les caractères désignés par Ctrl-X, où X est une lettre quelconque, sont saisis en pressant
la touche Ctrl (ou Ctl, ou Control) puis en pressant la touche correspondant à la lettre
indiquée. Bien que nous indiquions cette lettre en majuscule, vous pouvez la presser
sans utiliser la touche Majuscule.
Les autres caractères spéciaux sont le caractère de nouvelle ligne (qui est identique à
Ctrl-J), le Backspace (qui est identique à Ctrl-H), Esc, Tab et Suppr (parfois désigné par
Del, Delete ou Rubout).
Nous utilisons différentes polices dans ce livre :
Italique
Nous utilisons l’italique pour mettre en évidence des termes spéciaux lorsqu’ils
apparaissent pour la première fois, pour les adresses de courrier électronique et les
URL. Nous l’employons également lorsque nous citons les pages du manuel et
pour indiquer des paramètres formels qui devront être remplacés par des valeurs
réelles. Les commentaires des exemples sont également en italique.
Châsse fixe
Cette police indique les noms de fichiers Unix, les commandes internes et externes,
ainsi que les options de ces commandes. Elle sert également à faire ressortir les
noms de variables, les mots-clés du shell, les options, les noms de fonctions, les
suffixes des noms de fichiers. Dans les exemples, le contenu des fichiers ou la sortie
xviii Préface
des commandes sont en châsse fixe, tout comme les lignes de commande ou les
exemples de saisie lorsqu’ils apparaissent dans du texte normal. En résumé, tout ce
qui est lié à l’utilisation de l’ordinateur est dans cette police.
Châsse fixe grasse
Nous l’utilisons dans le texte pour faire ressortir les expressions régulières et les
motifs du shell par rapport au texte à comparer. Nous l’employons également dans
les exemples afin de montrer les interactions entre l’utilisateur et le shell. Tout ce
que tape l’utilisateur sera dans cette police. Par exemple :
$ pwd L'utilisateur a tapé ça
/home/tolstoy/novels/w+p Le système a affiché ça
$
Les références aux pages de manuel Unix sont représentées selon le style standard :
nom(N), où nom est le nom de la commande et N est le numéro de la section (générale-
ment 1) dans laquelle se trouve l’information. grep(1), par exemple, désigne la page de
manuel de la commande grep située dans la section 1. La documentation de référence
est désignée sous le terme « page de manuel » ou, de façon abrégée, « manpage ».
Nous désignons les appels systèmes Unix et les appels de fonctions de la bibliothèque C
sous la forme open(), printf(). Le manuel Unix est découpé en sections : la section 1
concerne les commandes utilisateur, la section 2 les appels système et la section 3 les
fonctions de la bibliothèque C (il y a d’autres sections, mais elles ne nous concernent
pas ici). Le problème est que certaines commandes utilisateur portent le même nom
que certains appels système ou que certaines fonctions C : c’est justement le cas de
printf, qui est à la fois une commande shell et une fonction C (pour différencier les
pages de manuel, on note printf(1) et printf(3)). C’est aussi le cas de open sur Mac OS
X car c’est à la fois une commande utilisateur (open(1)) et un appel système (open(2)).
La commande man, par défaut, recherche d’abord dans les pages de la section 1, puis de
la section 2, puis de la section 3, etc. par conséquent, lorsqu’il y a ambiguîté, vous devez
préciser la section qui vous intéresse :
$ man 2 open Visualise la page de open(2)
$ man 3 printf visualise la page de printf(3)
Lorsque l’on introduit une nouvelle commande, un encadré comme ci-dessous décrit
l’outil, ses options principales, son utilisation et son but.
Le code xix
Exemple
Utilisation
prog [ options ... ] [ paramètres ... ]
Cette section montre comment lancer la commande, qui s’appelle ici prog.
Objectif
Cette section décrit pourquoi ce programme existe.
Options principales
Cette section énumère les options utiles pour une utilisation classique du
programme concerné.
Comportement
Cette section résume ce que fait le programme.
Avertissements
S’il y a un point à surveiller, il est mentionné ici.
Le code
Ce livre est rempli d’exemples de commandes shell et de programmes conçus pour être
utilisés quotidiennement par un utilisateur ou un programmeur : ils ne servent pas
uniquement à illustrer la fonctionnalité que l’on décrit. Nous vous encourageons forte-
ment à les modifier et à les améliorer.
Le code de ce livre est couvert par les termes de la licence publique générale de GNU
(GPL), qui autorise la copie, la réutilisation et la modification des programmes.
Consultez le fichier COPYING inclus avec les exemples pour connaître les termes exacts de
cette licence.
Le code des exemples est disponible sur le site web de ce livre : http://www.oreilly.fr/cata-
logue/2841773752.html.
Si vous utilisez le code de ces exemples, nous apprécierions, bien que nous ne l’exigions
pas, que vous mentionniez le titre, les auteurs, l’éditeur et l’ISBN de ce livre. Par
exemple : Introduction aux scripts shell, de Arnold Robbins et Nelson H.F. Beebe. Copy-
right 2005 O’Reilly Media, Inc., 0-596-00595-4. »
décrirons chacun de ces environnements (dans l’ordre alphabétique) et nous vous indi-
querons comment les télécharger sur Internet.
Cygwin
L’environnement cygwin a été créé par Cygnus Consulting (maintenant racheté par Red
Hat). En développant d’abord cgywin.dll, une bibliothèque partagée fournissant une
émulation des appels systèmes Unix, cette société a pu porter un grand nombre d’utili-
taires GNU sur les différentes versions de Microsoft Windows. Cette émulation
comprend une couche réseau TCP/IP dotée de l’API des sockets de Berkeley. Bien que
cet environnement puisse parfaitement fonctionner avec Windows 95/98/ME, il prend
tout son intérêt avec Windows/NT, Windows 2000 et Windows XP.
L’environnement cygwin utilise le shell bash, le compilateur GCC et les autres utilitaires
GNU pour former une boîte à outils Unix. Une commande mount sophistiquée permet
d’établir une correspondance entre la notation C:\chemin de Windows et les noms de
fichiers Unix.
Le point de départ du projet cygwin est la page http://www.cygwin.com/. La première
chose à télécharger est le programme d’installation : en le lançant, vous choisissez les
paquetages supplémentaires que vous souhaitez installer. Cette installation repose
entièrement sur Internet : il n’existe pas de CD officiels de cygwin, en tous cas créés par
les responsables du projet.
DJGPP
La suite DJGPP fournit des outils GNU compilés en 32 bits pour l’environnement MS-
DOS. Pour citer la page web :
DJGPP est un système de développement 32 bits complet C/C++ pour les PC Intel 80386 (et supé-
rieur) tournant sous MS-DOS. Il contien des portages de nombreux utilitaires de développement
GNU. Les outils de développement, ainsi que les programmes qu’ils produisent exigent au mini-
mum un 80386. Dans la plupart des cas, les programmes produits peuvent être vendus librement et
sans devoir de royalties.
Le nom de cette suite provient des initiales de D.J. Delorie, qui a porté le compilateur
C++ de GNU, g++, sur MS-DOS, et des initiales de g++, GPP. Elle a évolué pour devenir
un environnement Unix complet, au-dessus de MS-DOS, doté de tous les outils GNU et
du shell bash. À la différence de cygwin ou d’UWIN (voir plus bas), vous n’avez pas
besoin de Windows : un processeur 32 bits et MS-DOS suffisent (bien que vous puissiez
évidemment utiliser DJGPP dans une fenêtre MS-DOS de Windows).
Le site web de cette suite est http://www.delorie.com/djgpp/.