On réalise ici une petite application de gestion pour un loueur de cassettes vidéo au moyen de shell-scripts. Il s'agit de gérer la liste des cassettes, la liste des clients, et la liste des emprunts.
Toutes ces données sont contenues dans des fichiers texte, chaque ligne comportant plusieurs champs séparés par des «deux-points».
CLIENTS
Champs: référence de client (unique), nom, prénom, adresse
dup01:dupont:marcel:rue des pommes
dup02:dupont:berthe:allee des idees
all01:alliot:bernard:place ricard
mey01:mery:jean-claude:rue de la duplication
Ici on utilise, en principe, les 3 premières lettres du nom suivies
d'un nmnre à 2 chiffres.
CASSETTES
Champs: référence de cassette (unique), titre
enf001:oui oui a la plage
enf002:wallace et gromit
hor001:massacre a la tronconneuse
dra001:titanic
com002:l'horloge bleue
com004:le sens de la vie
enf010:flipper le dauphin
enf009:toys story
enf013:toys story 2
enf014:ouioui et le pere noel
hor003:les portes de l'enfer
com003:le pere noel est une ordure
Les trois premiers caractères de le référence indiquent le genre
du film : enf
= enfants, hor
= horreur, etc.
EMPRUNTS
Champs: référence de cassette, référence du client et date de l'emprunt
enf002:1:10/01/1998
enf001:1:11/01/1999
com004:3:12/01/2000
Copiez chez vous (dans votre répertoire USI
) les fichiers de cette
application :
cp -r /net/home/exemples/USI/td-video-2000 .
grep
permet de sélectionner les lignes
d'un fichier qui correspondent à un certain critère, défini par une
expression régulière. sort
renvoie des données triéescut
renvoie des parties de lignes (champs délimités par
des séparateurs)head
et tail
renvoient le début ou la fin d'un fichier.
grep enf CASSETTES
Donnez une commande permettant d'afficher les titres des films
d'horreur (référence hor...
).affichage-genre
contenant :
#
# affichage des cassettes d'un genre donne
#
grep $1 CASSETTES
rendez-le exécutable, puis lancez-le :
chmod +x affichage-genre
affichage-genre enf
Bravo, vous venez d'écrire votre premier shell-script ! En gros,
un script est un fichier texte qui contient une suite de commandes,
avec éventuellement des paramètres.
recherche-titre toys
Avant d'enregistrer un nouveau client, il faut lui donner une référence
qui n'a pas déjà été attribuée et pour cela on consulte le fichier
CLIENTS. Analysez la commande suivante :
grep ^dup CLIENTS | sort | tail -1
nouveautes-genre
qui affiche les n dernières cassettes d'un
genre donné. Exemple, la commande
nouveautes-genre enf 3
devrait afficher les cassettes enf010
, enf013
et enf014
.
cut -d: -f2,3 CLIENTS
ajouter-client
qui suit
#
# ajouter-client reference nom prenom adresse
#
echo $1:$2:$3:$4 >> CLIENTS
ajouter-cassette fic001 "La menace fantome"
DATE=`date +%d/%m/%Y`
echo nous sommes le $DATE
L'option -v
de la commande grep
permet de sélectionner les lignes
qui ne contiennent pas un critère donné.
grep -v ^enf CASSETTES
retour-cassette
, utilisable sous la forme :
retour-cassette com004
join
permet de faire des «rapprochements»
ou «jointures»
entre deux fichiers ayant un champ commun. Voici par exemple
(script essai-join
)
comment compléter chaque ligne du fichier EMPRUNTS par la
description de la cassette empruntée.
# tris préalables sur la même clé : la référence des cassettes
sort -t : -k 1 CASSETTES > CASSETTES.par-ref-cassette
sort -t : -k 1 EMPRUNTS > EMPRUNTS.par-ref-cassette
# jointure
join -t : -1 1 -2 1 EMPRUNTS.par-ref-cassette CASSETTES.par-ref-cassette
Les paramètres :
-t :
» signale que les champs sont séparés par des
«deux-points» -1 1 -2 1
»les clés des deux fichiers
sont dans les premiers champs.cut
bien placé
permettra de selectionner les champs utiles).
awk
permet de traiter un fichier
ligne par ligne. Essayez ceci (script essai-awk
) :
awk -F : '{printf("| %6s | %-30s |\n",$1,$2)}' CASSETTES
Le premier paramètre de printf
est une
spécification de format qui indique comment seront
présentés les paramètres suivants : une barre verticale
et un espace, premier élément
sur 6
caractères cadrés à droite, un espace, une barre et un espace, le second
cadré à droite sur 30 caractères, un espace et une barre suivis
par un saut de ligne.
afficher-clients
qui donne la liste
des clients dans l'ordre alphabétique.
Conseil : faire un tri du fichier client, puis utiliser awk
pour présenter les données.
10/01/1998 dup001 marcel dupont enf002 wallace et gromit
11/01/1999 dup001 marcel dupont enf001 oui oui a la plage