Tous les shells qui seront créés par la suite devront avoir le droit d'exécution correctement positionné, au moins pour leur propriétaire.
Recherche d'information sur un utilisateur
-
Écrivez un script shell
infouser.shqui permette de chercher si un utilisateur d'un nom donné existe sur votre machine, en affichant sa référence complète (c'est-à-dire sans aucun filtrage).
Le nom recherché sera passé comme paramètre au shell.
La recherche portera dans le fichier/etc/passwd.Cacher la solutionComme d'habitude quand on veut traiter un fichier, il vaut mieux visionner son contenu, avant de vouloir l'exploiter (
more /etc/passwd).#!/bin/sh grep $1 /etc/passwd -
Modifiez ce shell pour qu'il teste si un paramètre est bien passé en ligne. En cas d'erreur (aucun paramètre ou plus d'un), un message sera affiché expliquant la bonne syntaxe à suivre.
Cacher la solution#!/bin/sh if test $# -ne 1 then echo Mauvais nombre de parametres. echo echo Usage: $0 uid exit 1 fi grep $1 /etc/passwd
Quelques manipulations sur un corpus XML
Pour cette partie du TP, il vous faut d'abord récupérer
le corpus suivant :
francis.exodic.xml
Ce fichier contient 20 notices en XML Exodic, dans une forme indentée,
son exploration préparatoire est conseillée.
-
Écrivez un script shell qui compte le nombre de notices, en passant le nom de fichier en paramètre.
L'élément racine se nommeexodic.Cacher la solution#!/bin/sh if test $# -ne 1 then echo Mauvais nombre de parametres. echo echo Usage: $0 fichier exit 1 fi NB_NOTICES=`cat $1 | grep "<exodic " | wc -l` echo Nombre de notices dans $1: ${NB_NOTICES} -
Modifiez le shell précédent pour qu'il teste en plus l'existence du fichier demandé avant traitement, puis pour qu'il sorte les résultats dans un fichier nommé
resultats.txt.Cacher la solution#!/bin/sh if test $# -ne 1 then echo Mauvais nombre de parametres. echo echo Usage: $0 fichier exit 1 fi if test ! -f $1 then echo $1 "n'existe pas (ou n'est pas un fichier)." exit 2 fi NB_NOTICES=`cat $1 | grep "<exodic " | wc -l` echo Nombre de notices dans $1: ${NB_NOTICES} > resultats.txtCette fois, on a mis la chaîne contenant les apostrophes (caractère spécial) entre guillemets pour les banaliser.
-
Installer et parcourir des fichiers dublin core d'un arbre de répertoires pour afficher le type de document des notices qui y sont présentes.
Il faut d'abord récupérer le fichierdata_dc.tar.gz.
Votre shell devra décompresser puis installer l'archive du fichiertarsousFormation/TP_dc.
Cela donnera un répertoiredccontenant 5 répertoires nommés de1à5.
Ces sous-répertoires contiennent chacun un fichierdublin_core.xmlavec une seule notice (qu'il est conseillé d'aller regarder).
Ces opérations réalisées, la suite du shell devra chercher le type de document de chaque notice, identifiable avecdcvalue element="type".
Cette information trouvée, les résultats seront écrits dans le fichiertypesDC.txt.
Cacher la solution#!/bin/sh # En etant dans le repertoire Formation/TP_dc gunzip data_dc.tar.gz tar -xvf data_dc.tar for FILE in dc/*/*.xml do cat $FILE | grep 'dcvalue element="type"' >> typesDC.txt doneCette fois, on a mis la chaîne contenant les guillemets (caractère spécial) entre apostrophes pour les banaliser.
On utilise une double redirection en sortie
>>car il faut concaténer les différentes opérations d'écriture dans le fichier résultat. -
Écrivez un script shell qui utilise un fichier de clés de sélection avec grep sur un fichier de DOI, pour récupérer chaque sélection dans un fichier résultat différent. Les noms de ces fichiers résultats contiendront la valeur de la clé de sélection.
Le fichier de clés estlisteCles.txt.
Le fichier à filtrer estlisteDOI.txt.gz.Cacher la solution#!/bin/sh export LC_COLLATE=C REP=. while read KEY do NAME=selection_$KEY zcat listeDOI.txt.gz | grep "$KEY" > ${REP}/$NAME.txt done < $REP/listeCles.txtIl est important de noter que, surtout pour le fichier des critères de sélection, le traitement se déroule sous Unix/Linux. Par conséquent, il faut prendre garde aux fins de ligne qui doivent être de type Unix (
\n). La présence de fins de ligne de type Windows (\r\n) perturbe les opérations de sélection comme avecgrep(matching incorrect).
Philippe.Houdry@inist.fr