Tux

Le système UNIX

TD 7 - Bash : Rédaction d'utilitaires

C. Drocourt
I.U.T. Amiens
drocourt@iut-amiens.fr

A - La commande select

Description :
Cette commande, propre au Korn-Shell et à bash, représente un intermédiaire entre les commande case et for. Cette commande permet un choix parmi un ensemble de valeur et d'exécuter la commande se rapportant à cette valeur.
select Identificateur [in liste_choix]
do
        commande
        ...
done

La commande select écrit sur la sortie d'erreur standard la liste des choix liste_choix, chacun étant précédé d'un numéro. Si in liste_choix n'est pas spécifié, les paramètres positionnels sont utilisés.
Le contenu de la variable PS3 s'affiche et l'entrée standard est lue. Si le numéro d'un des mots listés est saisi, le paramètre Identificateur prend la valeur de ce mot et la variable d’environnement REPLY le numéro correspondant.

Exemple :
$ cat essai2select
PS3="Entrez votre choix :"
select i in quitter date nb_fichiers nb_repertoires
do
   case $REPLY in
     1) break;;
     2) date;;
     3) echo "il y a `ls –ail|wc –l`fichiers dans le rép.`pwd`";;
     4) echo "il y a `ls –ail|grep drwx|wc-l` rép. dans `pwd`";;
     *) echo mauvaix choix;;
    esac
done
$ essai2select
1) quitter
2) date
3) nb_fichiers
4) nb_repertoires
Entrez votre choix :5
mauvais choix
Entrez votre choix :


Exercice :
Rédiger un script-shell qui rappelle en quelque mots à un utilisateur novice le rôle des commandes cd, ln et rm.
Contrainte : utiliser une structure select.

B - Durée de connexion

Travail à faire :
Le but de cet exercice est de sauvegarder dans un fichier caché nommé espion les dates et heures de connexion et de déconnexion de l'utilisateur.
A la connexion s'inscrira dans le fichier espion la phrase
Gaston s'est connecté le 25 décembre 1346 à 17h17
A la déconnexion s'inscrira dans le fichier espion la phrase
Gaston s'est déconnecté le 26 décembre 1346 à 7h01
En outre, on affichera à la déconnexion un message sur stdout indiquant le temps total de connexion.

Indications :
Il pourrait être judicieux d'utiliser le fichier .profile ou .bashrc.
Le nombres de secondes pendant lesquelles un utilisateur est resté connecté est contenu dans la variable $SECONDS.
Lorsque l'on se déconnecte, le système envoie au shell le signal SIGEXIT de numéro zéro.

C - le problème des boites aux lettres

Les étudiants qui ne se connectent guère ou ceux dont les boites aux lettres sont victimes de toutes sortes d'envois envahissants occupent dans le répertoire /var/spool/mail un espace trop important.

Exercice :
Rédiger un utilitaire nommé ptt qui recherchera les noms d'utilisateurs dont la boite aux lettres occupe un nombre d'octets supérieur au nombre passé en arguments. Ces noms d'utilisateur, associés à la taille de leur boite aux lettres, seront affichés sur stdout par ordre décroissant d'espace disque occupé.

Remarque :
On travaillera dans "l'esprit Unix", c'est-à-dire en respectant les consignes suivantes :
– le code de retour donnera le nombre d'utilisateurs fautifs (donc 0=tout va bien)
– le nombre d'arguments sera testé
– les messages d'erreurs éventuels seront affichés sur stderr.
– les éventuels fichiers temporaires auront des références personnalisées et uniques et seront détruits automatiquement.
– l'exécution du script-shell ne pourra être interrompue au clavier.