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.