1. La commande mail.
Caractéristiques :
- mail signifie "courrier".
- Cette commande permet d'envoyer un message par l'intermédiaire
de l'entrée standard, ou de lire des messages de manière
interactive (ce que fait mieux également le gestionnaire
de courrier électronique de netscape).
- Elle peut apparaître en fin de branchement.
Syntaxes :
- Envoi d'un courrier : mail [-tw] [-mtype_du_message]
adresse_destinataire [...]
- Lecture du courrier : mail [-ehpPqr] [-ffichier]
Description :
cf. la description de la commande mail, en tapant
: man mail
Exemple :
mail linfg250@marine.edu.ups-tlse.fr < message.txt
Cette commande envoie le contenu du fichier message.txt
à l'adresse du destinataire.
Codes de retour :
- Pas d'erreur : 0
- Pas de courrier, ou opération interrompue pour cause d'erreur : >0
2. La commande cat.
Caractéristiques :
- cat vient de "concatenate"
("concaténer").
- Cette commande permet d'afficher le contenu de l'entrée standard
(ou, s'il y a lieu, le contenu du ou des fichiers passés en paramètres,
en les concaténant).
- Cette commande est un filtre.
Syntaxe :
Description :
- -n : numérote les lignes, avant de les envoyer
sur la sortie standard.
- -b : identique à -n, sans numérotation
des lignes vides.
- Autres options : cf. la description de la commande cat,
en tapant : man cat
Exemples :
- cat fich1.txt fich2.txt > fich3.txt
Cette commande recopie fich1.txt puis, à la suite,
fich2.txt, le tout dans fich3.txt
- Dans l'exemple suivant, ce sont les caractères tapés
sur l'entrée standard qui sont écrits dans le fichier fich.txt
:
> cat > fich.txt
ligne1
ligne2
<Ctrl>D |
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
Attention :
Il est fortement déconseillé de rediriger l'entrée
standard ou la sortie standard d'un branchement, pour ne pas écrire
des lignes de commande incompréhensibles et pas toujours interprétables
par le shell. Par exemple, au lieu de rediriger l'entrée standard,
dans la ligne de commande suivante :
pour laquelle le shell indique qu'il y a une ambiguïté sur
la redirection en entrée, on conseille d'utiliser la commande cat
de la manière suivante :
L'écriture suivante est également correcte :
mais sa signification est légèrement différente de la ligne de commande précédente,
puisque les commandes situées
entre parenthèses sont lancées dans un "sous-shell" (concept qui sera décrit
dans le paragraphe 7 de la séance 14 de travaux dirigés).
Remarque :
Bien que syntaxiquement correcte, la séquence suivante est toujours inutile
à l'intérieur d'un branchement :
3. La commande wc.
Caractéristiques :
- wc vient de "words count"
("compter les mots").
- Cette commande permet de compter le nombre de lignes, de mots ou de
caractères dans le ou les fichiers passés en paramètres, ou sur l'entrée
standard.
- Cette commande est un filtre.
Syntaxe :
Description :
- Appelée sans option, la commande wc affiche, sur chaque ligne, le nombre de lignes,
le nombre de mots, le nombre de caractères et le nom d'un des fichiers passés en paramètres.
Ces différentes valeurs sont précédées et séparées entre elles par des espaces, dont le nombre est
difficile à prévoir a priori.
- -l, -w, -c : permettent
de retourner respectivement les nombres de lignes, de mots et de caractères.
- Autres options : cf. la description de la commande wc,
en tapant : man wc
Exemple :
wc -l exam_module4_2003.txt
Cette commande affiche le nombre de lignes du fichier exam_module4_2003.txt
suivi du nom du fichier.
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
4. Exercice 1.
1) Que réalisent les deux commandes suivantes :
echo "bonjour" > cat
echo "bonjour" | cat
2) En une seule ligne de commande, envoyer à l'utilisateur linfg250,
par courrier électronique, la liste détaillée des
répertoires et fichiers contenus dans le répertoire courant.
5. La commande chmod.
Caractéristiques :
- chmod vient de "change mode"
("changer de mode").
- Cette commande permet de modifier les droits d'accès à
un ou à plusieurs fichiers ou répertoires dont on est le
propriétaire.
Syntaxe :
- Les personnes sont u (user)
s'il s'agit du propriétaire du fichier ou du répertoire,
g (group) s'il s'agit des membres du groupe du propriétaire,
o (others) s'il s'agit des autres utilisateurs ou
a (all) s'il s'agit de tout le monde.
- Le signe + signifie qu'on ajoute des droits d'accès,
alors que - signifie qu'on en enlève.
- Les permissions sont r (read)
pour la lecture,
w (write) pour l'écriture,
et x (execute)
pour l'exécution.
Description :
cf. la description de la commande chmod, en tapant
: man chmod
Exemple :
chmod g+rx /users/linfg/linfg0/TD/td12ex*
Cette commande rajoute les droits de lecture et d'exécution aux
membres du groupe, sur les fichiers situés dans le répertoire
/users/linfg/linfg0/TD, dont le nom commence par td12ex
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
Remarque :
Pour connaître les droits d'accès à un fichier,
il suffit de taper la commande ls -l.
6. Les scripts.
Un "script" est un ensemble de commandes UNIX rassemblées
dans un fichier, dont le nom se termine en général par l'extension
.sh (abréviation de "shell"). Pour lancer
l'exécution d'un script contenu dans le fichier nom_script.sh,
on peut :
- Soit taper la commande sh nom_script.sh [paramètre_script
...]
- Soit le rendre exécutable (grâce à l'utilisation
de la commande chmod), puis l'appeler directement, de la
manière suivante :
> chmod u+x nom_script.sh
> nom_script.sh [paramètre_script ...]
... |
Lorsqu'on lance l'exécution d'un script, on lance en fait un
nouveau shell (on rappelle qu'un shell est un programme exécutable,
dont le rôle est d'interpréter des commandes UNIX), dit "shell
fils", qui porte le nom du script, et c'est dans ce nouveau shell
que les commandes du script seront interprétées. Le script,
lui, est considéré comme une commande lancée dans
le shell de départ.
Remarques :
- Dans un script, les commentaires apparaissent après un caractère
# situé sur la même ligne.
- Ici, le shell fils sera un "C shell", sauf si on place, en début
de script, la ligne suivante :
7. La commande sh.
Caractéristiques :
- sh vient de "shell" (l'objet
de ce polycopié !).
- Cette commande permet de lancer un shell de type shell de Bourne.
Elle permet aussi d'exécuter un "script" (cf. le paragraphe 6).
- Elle peut apparaître en fin de branchement.
Syntaxes :
- sh [-acefhiknprstuvx]
Le shell qui est lancé lit et interprète les
commandes tapées sur l'entrée standard. Pour interrompre l'exécution de ce shell, il faut taper la commande exit
- sh [-acefhiknprstuvx] nom_script [paramètre_script ...]
Les paramètres de sh sont le nom d'un
script, suivi des paramètres éventuels de ce script.
Description :
cf. la description de la commande sh, en tapant
: man sh
Exemples :
Codes de retour :
Le code de retour de la commande sh est le code de retour
de la dernière commande exécutée dans le cadre du nouveau
shell. Dans le cas où un script est lancé, si
une commande renvoie un code de retour non nul, alors l'exécution
du script est interrompue et ce code de retour est le code de retour de la commande sh.
Remarque :
Comme on étudie le shell de Bourne, au début de chacune des trois séances restantes de travaux pratiques,
on commencera par taper la commande sh. Dorénavant, les exemples d'exécution feront apparaître
un $ comme prompt, et non plus un >
8. Les paramètres d'un shell.
8.1. Les paramètres positionnels d'un shell.
Chaque shell dispose de dix "paramètres positionnels",
désignés par $0, $1, ..., $8 et $9. Le paramètre
positionnel $0 a comme valeur a priori le nom du shell. Quant aux
neuf autres paramètres positionnels, ils n'ont pas de valeur a
priori.
Il y a deux façons de leur attribuer des valeurs :
- Dans le cas où on lance un script, les valeurs des paramètres
du script sont affectées aux paramètres positionnels du nouveau
shell qui est lancé. En particulier, le paramètre positionnel $0
reçoit comme valeur le nom du script.
Exemple :
exemple.sh
|
echo "exécution du script $0 :"
echo "contenu du fichier $1 :"
cat $1
echo "contenu du fichier $2 :"
cat $2 |
$ exemple.sh fich1.txt fich2.txt
exécution du script exemple.sh :
contenu du fichier fich1.txt :
<ligne 1 du fichier fich1.txt>
...
contenu du fichier fich2.txt :
<ligne 1 du fichier fich2.txt>
...
$ |
8.2. Les autres paramètres d'un shell.
Tout shell possède également un certain nombre de
paramètres autres que les paramètres positionnels, dont les noms
commencent par le métacaractère $, et dont
les valeurs dépendent exclusivement du contexte du shell :
- Le paramètre $# a pour valeur le nombre
de paramètres (options ou arguments).
- Le paramètre $* a pour valeur une chaîne
de caractères composée par la liste des paramètres,
séparés par des espaces.
- Enfin, le paramètre $? a pour valeur le code
de retour de la dernière commande exécutée dans le
shell. En particulier, si on lance un script, la valeur du paramètre $?,
à la fin de l'exécution du script, est le code de retour
de la dernière commande du script ayant été exécutée. C'est donc grâce à ce paramètre
qu'on peut récupérer le code de retour d'un programme exécutable. On a déjà vu,
au paragraphe 7 de la séance 6 de travaux dirigés,
que le retour d'un code, dans un programme écrit en langage C, peut être fait soit par la
fonction exit, soit par l'opérateur return
(à condition que cet opérateur soit situé dans la fonction main).
9. La commande tr.
Caractéristiques :
- tr vient de "translate" ("traduire").
- Cette commande permet la "traduction" de caractères
provenant de l'entrée standard. Cette commande fonctionne également
avec les caractères de contrôle déjà présentés
dans la description de la commande echo
- Cette commande est un filtre.
Syntaxes :
- tr -s|-d [-c] chaîne
- tr [-cs] chaîne1 chaîne2
Description :
- -s : élimine les répétitions des
caractères composant la chaîne de caractères chaîne,
en n'en laissant qu'un à chaque fois.
- -d : supprime toutes les occurrences des caractères
composant la chaîne de caractères chaîne
- Autres options : cf. la description de la commande tr,
en tapant : man tr
Exemples :
- tr 'abc' 'ABC'
Cette commande attend l'entrée de données au clavier.
Si on tape calebasse chaque occurrence d'un a
est remplacé par un A, chaque occurrence d'un b
est remplacé par un B et chaque occurrence d'un c
est remplacé par un C, ce qui donne dans le cas
présent :
CAleBAsse
- La commande tr '\n' ' ' remplace chaque retour-chariot
par un espace, parmi les caractères provenant de l'entrée
standard.
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
Remarque :
La commande tr 'ab' 'A' n'effectue aucun remplacement pour le caractère
b, et la commande tr 'a' 'AB' ne remplace le caractère a
que par le caractère A
10. La commande rm.
Caractéristiques :
- rm vient de "remove"
("supprimer").
- Cette commande permet de supprimer un ou plusieurs fichiers passés
en paramètres.
Syntaxe :
Description :
- -i : demande confirmation avant effacement.
- Autres options : cf. la description de la commande rm,
en tapant : man rm
Exemple :
Cette commande doit être évitée en général, car elle efface
tous les fichiers non cachés du répertoire courant !
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
Attention :
L'expérience montre que beaucoup d'utilisateurs sont tentés
d'utiliser la commande rm en fin de branchement, comme
par exemple dans l'exemple suivant :
Cette syntaxe est incorrecte, car la commande
rm n'est pas un filtre ! Pour supprimer les fichiers
du répertoire courant comprenant l'extension .bak,
on peut bien sûr utiliser l'une des deux syntaxes suivantes :
rm *.bakou rm `ls *.bak`
Remarque :
Pour supprimer un fichier dont le nom commence par un caractère -,
comme par exemple -fichier, on peut taper la commande :
car la commande rm -fichier provoquerait l'affichage d'un message
d'erreur, le shell interprétant les caractères -fichier comme une liste
d'options de la commande rm. On peut également taper :
11. La commande cut.
Caractéristiques :
- cut signifie "couper".
- Cette commande permet de supprimer une partie des lignes d'un ou de
plusieurs fichiers, ou de l'entrée standard.
- Cette commande est un filtre.
Syntaxes :
- cut -cliste [nom_fichier ...]
- cut -fliste [-ddélimiteur] [-s] [nom_fichier
...]
Description :
- -c : ne retient sur chaque ligne que les caractères
situés à une position donnée par liste. Par exemple, l'option -c1-50 ne garde que les 50 premiers caractères de chaque
ligne.
- -f : ne retient qu'une liste de champs (séparés
soit par des tabulations, soit par un délimiteur spécifié
par l'option -d). Par exemple, l'option -f1,3-5
conduira la commande à ne garder que les champs numéros 1,
3, 4 et 5 de chaque ligne.
- Autres options : cf. la description de la commande cut,
en tapant : man cut
Exemples :
- Soit un fichier calepin.txt, représentant un annuaire
téléphonique, dans lequel chaque ligne apparaît sous
la forme "DUPONT Jean 05.61.75.18.47".
La commande suivante :
affiche le nombre de personnes figurant dans ce calepin et résidant
dans le Sud-Ouest (le numéro de téléphone de ces personnes
commence par les chiffres 05).
- Le format d'affichage de la commande wc nom_fichier
est en fait le suivant :
où nb_l désigne le nombre de lignes, nb_m
le nombre de mots et nb_c le nombre de caractères
de nom_fichier. Quant à <espaces>,
ce symbole désigne une chaîne non vide, de longueur variable, composée
du seul caractère espace. Par conséquent, si on désire
afficher le nombre de mots du fichier fichier.txt, on peut
taper l'une des deux commandes suivantes :
Codes de retour :
- Pas d'erreur : 0
- Opération interrompue pour cause d'erreur : > 0
Remarque :
Les options -cliste, -fliste et -ddélimiteur
peuvent être écrites avec un espace situé juste avant
la liste ou le délimiteur.
12. Exercice 2.
1) On suppose que l'on dispose d'un fichier calepin.txt,
contenant des noms et des numéros de téléphone rangés
de la manière suivante :
calepin.txt
|
DUPONT Jean 05.61.75.18.47
MARTIN Yvonne 02.23.34.45.56
...
|
Écrire une commande qui effectue la recherche des personnes s'appelant DURAND et
qui restitue leurs numéros de téléphone, d'abord sous forme d'une
ligne de commande, puis sous forme de script.
2) Écrire une ligne de commande permettant d'afficher les noms des
fichiers du répertoire courant qui contiennent le mot main
(dans le fichier, et non pas dans le nom du fichier).
3) Après confirmation, effacer tous les fichiers du répertoire
courant, modifiés, lors d'un jour quelconque, entre 11h00
et 11h29.
4) Soit un fichier liste.txt, contenant une liste
d'adresses électroniques enregistrées ligne par ligne, et soit
un fichier lettre.txt contenant un message à
envoyer. Écrire la ligne de commande permettant d'envoyer ce message aux
gens de la liste.
Ces pages ont été réalisées
par A. Crouzil, J.D. Durou et Ph. Joly.
Pour tout commentaire, envoyer un mail à
crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.