Ce document a été produit par HEVEA.
Votre browser peut avoir a être configuré pour afficher correctement
certains symboles.
Reportez-vous à la documentation d'HEVEA.
Licence d'informatique
TD : Premiers programmes en shell
Ce document est disponible sous forme d'un fichier PostScript compressé.
Exercice 1 [Méta-caractères]
-
Lister les entrées du répertoire /usr/bin dont le
nom commence par la lettre
m
.
- Lister les entrées du répertoire /usr/bin dont le
nom commence par la lettre
m
et comporte exactement 3
caractères.
- Lister les entrées du répertoire /usr/bin dont le
nom commence par la lettre
m
et comporte au moins 3
caractères.
- Lister les entrées du répertoire /usr/bin dont le
nom commence par la lettre
m
et comporte une extension
(suffixe suivant un .
) non vide.
- Lister les entrées du répertoire /usr/bin dont le
nom commence par la lettre
m
ou j
.
- Lister les entrées du répertoire /usr/bin dont le
nom commence par la lettre
m
et comporte une lettre
majuscule.
- Lister les entrées du
répertoire /usr/bin dont le nom commence par la lettre
m
et ne comporte pas de lettre majuscule.
- Lister les noms de fichiers
comportant une étoile
*
Exercice 2 [Compter...]
Écrire un programme Shell qui compte de 1 à 10. Deux versions sont
imaginables ; une version à base d'une boucle for et une
version à partir d'une boucle while.
Exercice 3 [Arguments]
Écrire un programme Shell qui affiche un à un les arguments de la
commande. Par exemple :
% argument un deux trois
3 arguments :
1 - un
2 - deux
3 - trois
Exercice 4 [Suite]
Écrire un programme qui sort les valeurs successives de la suite
définie par :
|
Un+1 = |
Un/2 |
si Un est pair, |
|
3×Un + 1 |
si Un est impair. |
|
La valeur de U0 est passée en argument de la commande.
L'exécution se termine à l'affichage de la valeur 1.
Exercice 5 [Poubelle]
Question 1
On désire écrire une commande de manipulation d'une poubelle
de fichiers,
can. Cette commande accepte les trois
options suivantes :
-
can -l
- liste la poubelle ;
- can -r
- purge la poubelle ;
- can filenames
- transfert
les fichiers filenames dans la poubelle.
Question 2
Ajouter l'option
-
can -x filenames
- qui
supprime les fichiers filenames sans
passer par la poubelle.
Exercice 6 [Recherche d'utilisateurs]
Le fichier /etc/passwd contient les informations concernant
les utilisateurs. En particulier sont mémorisés le nom de login et
les noms et prénoms des utilisateurs. On développera une commande
searchuser qui identifie un utilisateur à partir de son
nom, prénom ou nom de login. Par exemple :
% searchuser marquet phm toto
marquet est connu :
phm:f4b0FtWrtrN3Y:5408:54:Philippe Marquet:/home/phm:/bin/tcsh
phm est connu :
phm:f4b0FtWrtrN3Y:5408:54:Philippe Marquet:/home/phm:/bin/tcsh
toto n'est pas connu
On utiliser la commande Unix :
-
grep
- qui filtre une entrée (l'entrée standard
ou la liste de fichiers passée en paramètre) et affiche toutes
les lignes contenant le premiers argument de la commande. De
plus, grep retourne 0 si la recherche est positive, 1
sinon. L'option -q de grep supprime
l'affichage du résultat ; seul le code de retour de la
commande est alors exploitable.
Exercice 7
Écrire une commande croissante qui vérifie qu'une suite
d'entiers donnée en paramètre est croissante.
Exercice 8 [Mon cp]
Réécrire la commande Unix cp à l'aide de l'unique primitive
copy src dest
qui recopie le contenu du fichier source src
(qui doit exister) dans le fichier dest (qui ne
doit pas exister).
Exercice 9 [Kind]
Écrire une commande kind qui liste les fichiers d'un type
donné. La syntaxe de cette commande est
kind
[-d|-t|-x]
filenames
La commande liste les fichiers qui sont des fichiers de texte (par
défaut ou option -t) qui sont des répertoires
(directories, option -d) ; ou qui sont exécutables
(option -x).
On utilisera la commande Unix :
-
file
- qui retourne le type d'un fichier ou d'une
liste de fichiers passés en argument. L'information est écrite
sous forme d'une chaîne de caractères sur la sortie
standard. Par exemple :
% file *
memo.txt: ASCII text
kind.sh: Bourne shell script text
slides: directory
clean: ELF 32-bit LSB executable, dynamically linked
Exercice 10 [Dernier login]
Écrire une commande Shell qui gère le dernier login. Lors de
chaque login, on appelle la commande lastlog -l ; l'appel
lastlog affiche la date du dernier login (mais pas celui en
cours !).
Exercice 11 [Où est-il ?]
Le but est d'écrire une commande Shell qui recherche les fichiers
dont le nom est passé en argument dans les chemins de recherche
des commandes. Ces chemins sont codés dans la variable
$PATH.
On pourra développer les questions suivantes :
Question 1 [La commande subst]
La variable
$PATH contient une suite de noms de
répertoires séparés par le caractère
:
. Par exemple :
% echo $PATH
.:/opt/kde/bin:/usr/local/lib/texmf/bin/i86_linux:/usr/local/bin:/usr/sbin:\
:/usr/X11R6/bin:/sbin:/etc:/home/phm/bin/linux:/home/phm/bin
Pour la transformer en une liste de répertoire plus
facilement manipulable par le Shell, il faut remplacer
chacun des caractères
:
par un espace. Ceci fait
l'objet de la commande
subst.
Question 2 [La commande whereisinpath]
La commande whereisinpath accepte un argument et
recherche dans les répertoires donnés par la variable
$PATH si une entrée correspondante à l'argument
existe. Elle doit imprimer toutes les possibilités
existantes.
Question 3 [La commande isbuiltin]
Un certain nombre de commandes du shell ne correspondent
pas à des exécutables recherchés dans les répertoires de
la variable $PATH mais sont des commandes internes
(built-in command) du shell et sont directement
exécutées par le shell.
La commande isbuiltin teste si son argument
correspond à une telle commande. On suppose que le fichier
désigné par la variable $BUILTIN contient la liste
des commandes internes du shell.
Question 4 [La commande whereareinpath]
Cette commande réalise le même traitement que
whereisinpath pour chacun des arguments qui lui
sont donnés. Cependant elle vérifie préalablement si la
commande correspond à une commande interne du shell.
L'option -u limite l'affichage, pour chacun des
arguments à la première solution.
Exercice 12 [Vérification du chemin]
Lorsqu'une commande prend en argument un chemin est que celui-ci
n'existe pas, un message d'erreur est affiché, par exemple :
% ls /usr/lib/thissoft/config/Makefile
/usr/lib/thissoft/config/Makefile: No such file or directory.
La commande verif affichera la partie gauche du chemin
qui est valide et la première entrée inexistante :
% verif /usr/lib/thissoft/config/Makefile
/usr/lib/thissoft: No such directory.
Exercice 13 [Instructions pushd/popd]
Le C-shell fournit deux commandes internes pushd et
popd facilitant la gestion des changemenst de répertoire
à l'aide d'une pile. La commande pushd est équivalente à
la commande cd mais elle mémorise (empile) le répertoire
courant. La commande popd change de répertoire pour le
répertoire qui se trouve en sommet de pile et supprime ce
répertoire de la pile.
On peut mémoriser la pile de répertoire dans un fichier.
Exercice 14 [Gestionnaire de mail]
Écrire une programme qui regarde si il y a du courrier pour un
utilisateur dont le nom est passé en argument ; par défaut
l'utilisateur courant. Le mail à destination de $USER est
déposé par le système de gestion des mails dans le fichier
/var/spool/mail/$USER. On affichera un des messages
suivants :
pas de messages pour <user>
courrier du jour pour <user>
courrier en retard pour <user>
Exercice 15
Développer une commande numerique qui vérifie que son
argument est un entier.
Exercice 16
Développer la commande
extract
[filename]
lineno1 lineno2
qui affiche les lignes lineno1 à
lineno2 du fichier passé en paramètre (par
défaut, l'entrée standard).
Exercice 17
Développer la commande tree qui affiche l'arborescence dont
la racine est passée en paramètre.
Ce document a été traduit de LATEX par
HEVEA.