
|
Le système UNIX
TD 6 - Le Bourne Again Shell
|
C.
Drocourt
I.U.T. Amiens
drocourt@iut-amiens.fr
|
Exercice 1 : L’invite du shell
L’invite du shell est contenu dans la variable PS1 qui, par
défaut, contient la chaîne composée par les
caractères "dollar" et "espace". Le but de cet exercice est de
disposer de l’invite suivante :
<NomUtilisateur>
bash <PID du shell courant> : <espace>
Ainsi, pour l’utilisateur Gaston, l’invite sera :
Gaston bash
1234:
1 – Modifier l’invite du shell sur la ligne de commande au niveau du
shell de login.
2 – Se déconnecter puis se connecter et constater que la
modification précédente n’a pas été
mémorisée. Où définir PS1 pour palier
à ce défaut ?
3 – Après avoir résolu le cas du shell de connexion,
empiler plusieurs shell (commande bash) et constater qu’il y a à
nouveau problème. Trouver une solution.
Exercice 2 : Le masque des droits
d’accès
1 – Ajouter au fichier de configuration une ligne permettant de masquer
les droits ----w-rwx pour les fichiers qui seront créés
à l’avenir.
2 – Un utilisateur a choisi un masque de 0. Quel problème
va-t-il rencontrer ?
3 – Un autre utilisateur a choisi un masque de 0777. A quel gros
problème va-t-il devoir faire face ?
Exercice 3 : Variables locales et variables
d'environnement
1 – Définir au niveau de la ligne de commande une variable
berliet contenant la chaîne de caractère "Stradair".
2 – Vérifier que la variable berliet est connue du
système grâce à la commande set. Afficher son
contenu.
3 – Empiler un nouveau shell. Afficher le contenu de berliet. Possible?
Vérifier avec set que berliet n'existe pas dans ce shell.
Quitter ce shell.
4 – On va résoudre le problème en exportant la variable
berliet (commande export ou typeset). Vérifier que berliet fait
maintenant partie des variables exportées (variables
d'environnement) avec la commande env.
5 – Empiler un nouveau shell. Afficher le contenu de berliet. Possible
? Vérifier avec set et env. Quitter ce shell.
6 – Supprimer cette variable berliet. Vérifier.
Exercice 4 : Exécution de script-shell
1 – Déclarer au niveau de la ligne de commande une variable
SM240 valant 'Europe'.
2 – Rédiger un script-shell nommé saviem qui affiche sur
stdout le contenu des variables $HOME et SM240, et qui attende 60
secondes.
3 – Lancer ce script-shell en tapant :
. saviem &
Que se passe-t-il ? Tracer la généalogie des processus
pour comprendre.
4 – Lancer ce script-shell en tapant :
saviem &
Que se passe-t-il ? Tracer la généalogie des processus
pour comprendre.
Exercice 5 : Script-shell et chemin
d’accès
1 – Que contient la variable d’environnement $HOME ?
2 – Créer un répertoire $HOME/bin qui contiendra les
exécutables réalisés dans le cadre de ce TD.
3 – Rédiger un script-shell nommé heure qui donne l’heure
sous le format « Il est exactement hh:mm »
4 – Se placer dans /tmp et tenter d’exécuter heure. Possible ?
Si non, résoudre le problème.
Exercice 6 : Les alias
1 – Consulter les différents alias présents dans votre
système.
2 – Définir un alias dir correspondant à la commande ls
–ail.
3 – Où placer cet alias pour le retrouver à chaque
connexion ?
Exercice 7 : Les paramètres positionnels
Ils permettent à un script-shell de récupérer des
arguments passés sur la ligne de commande.
Rédiger un script-shell qui traite ses arguments de la
façon suivante :
Test si l’argument est la référence d’un fichier ordinaire
Si oui, test si le fichier est lisible
Si oui, affiche <argument> est un fichier régulier et
lisible.
Le code de retour sera égal au nombre d’arguments qui sont des
références de fichier ordinaires et lisibles.
Au niveau de la ligne de commande, vérifier ce code de retour.
Exercice 8 : Le traitement des exceptions
Rédiger un script-shell nommé attrape réalisant
les opérations suivantes :
– Mise en place de traitement associés à certains signaux
– Le signal SIGTERM doit être ignoré
– La réception du signal SIGUSR1 doit causer
l’affichage du message « Le signal SIGUSR1 a tué le
processus <PID> » puis la mort du processus.
– La réception du signal SIGUSR2 doit causer
la destruction du fichier $HOME/bidon, mais pas la mort du processus.
– Affichage du PID du processus courant.
– Création d’un fichier vide de référence
$HOME/bidon (commande touch $HOME/bidon).
– Affichage des captages de signaux mis en place.
– Temporisation de vingt secondes.
– Rétablissement des comportements standards à la
réception des signaux SIGTERM, SIGUSR1 et SIGUSR2.
– Affichage du message « Comportement standard rétabli
».
– Temporisation de dix secondes.
Lancer ce script-shell en arrière-plan et vérifier que le
traitement des signaux a bien été mis en place.
Exercice 9 : Script-shell (I)
Rédiger un script-shell qui détecte si une personne, dont
on passe le nom de login en argument, est connectée sous Unix.
Ne pas oublier le test du nombre d’argument et le code de retour.
Exercice 10 : Script-shell (II)
Rédiger un script-shell qui affiche pour les utilisateurs
connectés leur nom de login, leur répertoire d’accueil et
les droits sur ce répertoire.
Ex : gaston
/home/gaffeurs/gaston drwxr-x---
bertrand
/home/gaffeurs/bertrand drwxrwxrwx
Exercice 11 : Script-shell (III)
Rédiger un script-shell qui prend trois arguments :
– le premier étant un nom de fichier.
– les deux autres des entiers n1 et n2
et qui affiche les lignes du fichier comprises entre n1 et n2.
Afficher les messages en cas d'erreur (nombre de paramètres
incorrect, fichier inexistant, fichier non ordinaire, fichier
protégé en lecture, …).