From 210117162d70b0b9df37e310a4e29bcd79cb011c Mon Sep 17 00:00:00 2001
From: meles
Le mot shell signifie « coquille » en anglais. Il
-s'agit du programme que vous utilisez régulièrement à l'ENS, et qui
-interprète les commandes. Par exemple, vous y tapez
@@ -167,6 +168,7 @@ Nous aurons alors :
La répétition de commandes complexes en ligne de commande du shell est
rapidement fastidieuse ; aussi est-il très pratique de connaître
@@ -174,6 +176,8 @@ les bases de la programmation de scripts shell. Les scripts servent
automatiser ou systématiser des tâches.
Il existe un script spécial, qui est exécuté au moment où on se connecte. Ce
script est contenu dans le fichier Il existe encore le script
Le nombre de scripts possibles est illimité ; vous pouvez en créer
autant que vous voulez, selon vos besoins : c'est ainsi que l'on
@@ -205,18 +212,33 @@ l'inverse.
jokers
-Il est parfois ennuyeux d'avoir à taper un nom complet de fichier comme
-
Pour éviter ces problèmes, on peut utiliser des jokers
-(wildcards en anglais).
+(wildcards en anglais). Pourquoi ce nom ? Eh bien, dans
+certains jeux de cartes, le joker permet de remplacer n'importe quelle
+carte ; dans le shell, les jokers permettent de remplacer n'importe
+quel caractère ou n'importe quelle séquence de caractères.
+Il existe principalement trois types de jokers :
+
@@ -271,44 +293,83 @@ affiche
(La commande
&icone.attention; Attention :
+Interlude : comment effacer un fichier nommé
+
+Avec tous ces caractères spéciaux, comment faire pour passer des
+arguments bizarres à une commande ? Par exemple, comment faire
+afficher un point d'interrogation suivi d'une étoile et d'un dollar par
+
+On ne peut pas les taper directement dans la ligne de commande (ici,
+avec le shell Il faut donc indiquer au shell de ne pas interpréter ces caractères
+comme des jokers. Pour cela, nous allons utiliser des mécanismes fournis
+par le shell : les quotations (mot anglais
+signifiant citation).
+
+Les mécanismes de citation sont les suivants :
+
-Interlude: comment effacer un fichier nommé
-Avec tous ces caractères spéciaux, comment faire pour passer des arguments
-bizarres à une commande ? Par exemple, comment faire afficher un point
-d'interrogation suivi d'une étoile et d'un dollar par
@@ -372,10 +433,11 @@ de savoir si
-Dernière forme de quotation:
Un programme consiste à traiter des données, et à renvoyer des données
@@ -438,6 +500,9 @@ pas suivi des m
sortie standard et la sortie d'erreur.
Pour résumer, chaque commande a donc :pine
ou
-mutt
, forum
, cc
,
-mozilla
, etc.
+s'agit du programme que vous utilisez régulièrement sur les machines
+Unix de l'ENS (que ce soient les Sun, les PC sous FreeBSD ou autres
+dérivés d'Unix), et qui interprète les commandes. Par exemple, vous y
+tapez pine
ou mutt
, forum
,
+cc
, mozilla
, etc.
Quels programmes utilisent le langage du shell ?
+Les scripts shell
Le script
.profile
$HOME/.profile
. C'est ce
@@ -187,10 +191,13 @@ config conscrits. Il est n
options.
Le script
.xinitrc
.xinitrc
, qui lance X ;
X est le gestionnaire de fenêtres classique sous Unix.
Créer ses propres scripts
nabuchodonosor
. Il est encore plus ennuyeux d'avoir à taper une
-liste de fichier pour les donner en arguments à une commande, comme :
+Il est souvent ennuyeux d'avoir à taper une longue liste de fichiers
+pour les donner en arguments à une commande, comme :
cc -o foo bar.c gee.c buz.c gog.c
+
+
L'étoile : *
echo
se contente d'afficher ses arguments.)
-
+mv *.c *.bak
, car le shell va passer à
-mv
les arguments foo.c bar.c foo.bak bar.bak
, et
-mv
ne sait pas quel fichier remplacer.
-rm * ~
, le shell remplace
-l'étoile par la liste des fichiers présents, et ils seront tous effacés. Si
-vous tapez rm *~
, seuls les fichiers dont le nom finit par un tilde
-seront effacés.
-mv *.c
+*.bak
, car le shell va passer à mv
les arguments
+foo.c bar.c foo.bak bar.bak
, et mv
ne sait pas
+quel fichier remplacer. rm *
+~
, le shell remplace l'étoile par la liste des fichiers présents,
+et ils seront tous effacés. Si vous tapez rm *~
, seuls les
+fichiers dont le nom finit par un tilde seront effacés. ?*
? On ne peut pas taper rm ?*
car le shell
+remplace ?*
par la liste de tous les fichiers du répertoire
+courant. On peut taper rm -i *
qui supprime tous les
+fichiers, mais en demandant confirmation à chaque fichier. On répond
+n
à toutes les questions sauf rm: remove ?*
.
+Autre méthode: utiliser les mécanismes de citation.
+Contourner les jokers : la citation (quotation)
+
+echo
?zsh
), car le shell essaye de les interpréter
+comme des jokers :
+chaland ~ echo ?*$
+zsh: no matches found: ?*$
+
+
+
-\
), qui protège un caractère de
+l'interprétation par le shell ;'
), qui protègent une chaîne de caractères de
+l'interprétation par le shell ;"
), qui protègent également une chaîne de caractères
+de l'interprétation par le shell, mais avec plus de souplesse que les
+précédents ;`
), qui cite la
+sortie d'une commande.?*
? On ne peut
-pas taper rm ?*
car le shell remplace ?*
par la
-liste de tous les fichiers du répertoire courant. On peut taper rm -i
- *
qui supprime tous les fichiers, mais en demandant confirmation à
-chaque fichier. On répond n
à toutes les questions sauf
-rm: remove ?*
.
-Autre méthode: utiliser les mécanismes de quotation.
-Quotation
-
-echo
?
-Le shell fournit des mécanismes pour ce faire. Ce sont les
-quotations.
-Le backslash (
\
)Les backquotes (
`
)`commande`
. Le shell
-exécute la commande indiquée entre backquotes, lit la sortie de la
-commande mot par mot, et remplace `
commande
-`
par la liste de ces mots. Exemple :
+Dernière forme de citation : `commande`
. Le
+shell exécute la commande indiquée entre backquotes, lit la
+sortie de la commande mot par mot, et remplace `
+commande `
par la liste de ces mots.
+Exemple :
@@ -396,9 +458,9 @@ commande it cmd
/usr/local/bin/emacs
-Entrée, sortie et redirection
+Entrée et sortie
-Entrée et sortie
+Que sont l'entrée et la sortie d'une commande ?
Résumé
+
@@ -457,7 +522,7 @@ que renvoient les programmes s'inscrit
d'erreur renvoyés par les programmes s'affichent à l'écran.
Mais il ne s'agit là que du comportement par défaut, et pas d'un
@@ -474,6 +539,31 @@ programme cueillette
, et envoyer la sortie (c'est-
les carottes cueillies) au programme hachoir
.
+Nous allons étudier successivement : +
+ ++Ces différentes configurations esquissent la grammaire d'une utilisation +très performante des fonctionnalités du shell ; vous saurez +en effet comment brancher un fichier sur l'entrée ou sur la sortie d'une +commande, et comment brancher la sortie d'une commande sur l'entrée +d'une autre. Il n'y a pas d'autre combinaison possible. +
+>