Ceci est une ancienne révision du document !
Table des matières
Scripts BASH
L'objectif de ce TD est de vous familiariser avec l'écriture de Scripts bash
.
Quelques Rappels
bash
est un shell de commandes permettant l'interaction de l'utilisateur avec le système d'exploitation. Ce langage de commandes, outre cette interactivité, permet d'automatiser des tâches. Ainsi, il dispose de certaines caractéristiques des langages de programmation plus « classiques », comme la manipulation de variables - cependant rudimentaire - le conditionnement de blocs d'instruction, la répétition, etc. Quelques éléments de rappel :
- Un
bash
-script est un fichier texte/source contenant une succession de commandesbash
- Toute commande « valide » dans le terminal l'est également au sein d'un
bash
-script - Un passage à la ligne au sein d'un
bash
-script correspond à la validation dans le terminal - un
bash
-script débute toujours par :#!/bin/bash
(c'est leshebang
)
Q.1 - Hello World
Ecrire le bash
-script correspondant au classique « hello world
»
Q.2 - Création de fichiers et redirection de STDOUT
Ecrire un shell-script, créant dans le dossier courant s'il n'existe pas déjà, un répertoire dont le nom est passé en premier argument. Il créera dans ce dossier 10 fichiers nommés « Un » à « Dix » contenant respectivement « file Un » à « file Dix »
Q.3 - Instruction conditionnelle
Ecrire un shell-script admettant 2 nombres en paramètres et affichant le plus grand des deux.
Q.4 - Ai-je un mail ?
Les mails s'accumulent au sein d'un spooler au nom de l'utilisateur. Ainsi, un nouveau mail arrivant pour $USER
sera habituellement déposé par le système dans le dossier /var/spool/mail/$USER
. Ecrire un bash
-script qui vérifie s'il y a du courrier pour un utilisateur dont le nom sera passé en argument.
Voir la section 'conditional expressions' de la BASH refcard
Pour résultat, on affichera sur la sortie standard un des messages suivants :
Pas de courrier pour <user>. Courrier du jour pour <user>. Courrier en retard pour <user>.
Q.5 - Boucles et table de multiplications
Ecrire un script nommé table.sh
permettant l'affichage des p
premières lignes de la table de multiplication d'un nombre n
. p
et n
sont passés en paramètre.
Q.6 - Boucles et calcul d'une série
Ecrire un bash
-script qui affiche les valeurs successives de la suite définie par :
La valeur de k
est passée en argument de la commande. L'exécution du script se stoppe lorsque le terme est égal à 1.
Q.7 - Trouver le plus petit
Ecrire un bash
-script admettant un nombre variable de valeurs entières en paramètre. Elle renvoie sur la sortie standard la plus petite.
Q.8 - Compréhension du metacaractère '*'
On considère la séquence de commandes suivante :
% mkdir rep % cd rep % touch echo % touch hello % * hello %
Que se produit-il quand on saisit les commandes suivantes ? Expliquez-en la raison.
% * *
puis
% * ; *
Q.9 - Premiers usages des tubes
A l'aide de la commande cut
, reprenez le bash
-script de la question 5 afin qu'il admette indépendamment le paramétrage suivant :
% ./table.sh p=5 n=6
et
% ./table.sh n=6 p=5
Dans les deux cas, la sortie standard sera identique.
Q.10 - Compter des lignes
A l'aide de la commande wc
, écrire un bash
-script nommé sup.sh
tel qu'il admette le paramètre suivant : ./sup.sh rep1 rep2
. rep1
et rep2
sont tous deux des dossiers. Ce point doit-être vérifié par sup.sh
. Le traitement réalisé par sup.sh
permet de savoir lequel des contient le plus grand nombre de références (i.e. dossiers et fichiers). En cas d'égalité, sup.sh
affichera le message : dossiers ayant le même nombre d'entrées
.
\section{Commande {\tt listebranche}}
\'Ecrire une commande {\tt listebranche} qui affiche le contenu de tous les r\'epertoires qui figurent dans le chemin de la r\'ef\'erence absolue de votre r\'epertoire courant, par exemple:
\begin{verbatim} $ pwd /home/enseign $ listbranche /home/enseign caron cli cormier ferment … /home adminsys dea enseign invite licence … / bin etc home users … \end{verbatim}