Énoncé 8 : Programmation et scripts Bash
Introduction
Durée
2 heures 45
Mots-clés
Script shell, code retour, test, opération arithmétique, structures de contrôle, boucle, condition
Objectif
À l’issue de ce chapitre, vous serez en mesure d’automatiser l’exécution de travaux à partir des éléments étudiés précédemment. Les fonctionnalités abordées vous permettront de créer vos propres scripts shell, programmes développés en langage Bash.
Ces exercices correspondent au chapitre 10 "Programmation et scripts Bash" du livre "Linux - Principes de base de l’utilisation du système 8e édition" dans la collection Ressources Informatiques aux Éditions ENI.
Matériel à prévoir
Ces exercices peuvent être réalisés sur n’importe quelle distribution Linux où le lecteur possède un compte utilisateur valide ; le compte utilisateur tux est utilisé en correction des énoncés.
Prérequis
Pour valider les prérequis nécessaires, avant d’aborder le TP, répondez aux questions ci-après :
1. |
Que signifient les caractères . (point) dans la commande suivante ? $ . ./.bashrc |
|
2. |
Quelle est la syntaxe des commentaires dans un script shell ? |
|
a. |
/* commentaire */ |
|
b. |
// commentaire |
|
c. |
# commentaire |
|
d. |
<!-- commentaire --> |
|
3. |
Quelle est la valeur du code retour d’une commande qui s’est bien déroulée ? |
|
a. |
0. |
|
b. |
1. |
|
c. |
12. |
|
d. |
257. |
|
4. |
Quelles commandes permettent de tester l’égalité numérique entre la variable x et la variable y ? |
|
a. |
[ $x -eq $y ] |
|
b. |
(( $x -eq $y )) |
|
c. |
test $x -eq $y |
|
d. |
[ $x = $y ] |
|
e. |
(( $x = $y )) |
|
f. |
test $x = $y |
|
g. |
[ $x == $y ] |
|
h. |
(( $x == $y )) |
Énoncé 8.1 Appel et exécution de scripts shell
Durée estimative : 20 minutes
1. |
Connectez-vous sur la troisième console virtuelle texte (tty3) en tant qu’utilisateur tux. |
2. |
Dans votre répertoire personnel, créez le sous-répertoire bin qui sera utilisé pour stocker tous les scripts shell écrits par la suite et placez-vous dans ce répertoire. |
3. |
Créez le script shell 01appel qui effectue les opérations suivantes :
|
4. |
Exécutez le script shell 01appel de la manière suivante : bash 01appel Après la fin de l’exécution du script, quelle est la valeur de la variable var dans votre environnement shell ? Pourquoi ? |
5. |
Exécutez le script shell 01appel de la manière suivante : 01appel Est-ce possible ? Pourquoi ? |
6. |
Ajoutez le droit d’exécution au script 01appel pour le propriétaire du fichier et ajoutez le chemin de votre répertoire bin à la variable d’environnement PATH s’il n’y est pas déjà. |
7. |
Exécutez le script shell 01appel de la manière suivante : 01appel... |
Énoncé 8.2 Code retour
Durée estimative : 5 minutes
1. |
Reconnectez-vous sur la troisième console virtuelle texte (tty3) en tant qu’utilisateur tux. |
2. |
Tapez la commande ls /etc/passwd et affichez son code retour. |
3. |
Tapez la commande ls glop et affichez son code retour. |
4. |
Affichez de nouveau le code retour de la dernière commande. Est-ce le même ? |
5. |
Allez dans votre répertoire bin et modifiez le script 01appel de façon qu’il renvoie un code retour égal à 2 puis testez-le. |
Indices
2. |
La variable spéciale $? contient le code retour de la dernière commande exécutée. |
5. |
Utilisez la commande exit. |
Énoncé 8.3 Enchaînement de commandes
Durée estimative : 5 minutes
1. |
Affichez la date système et la liste des fichiers présents dans le répertoire courant en une seule ligne de commandes. |
2. |
Affichez le contenu du fichier /etc/hosts s’il existe. |
3. |
Créez le fichier vide /tmp/glop s’il n’existe pas. |
Indices
1. |
Effectuez un enchaînement de commandes avec le caractère ; (point-virgule). |
2. |
Utilisez le code retour de la commande ls pour savoir si le fichier /etc/hosts existe, puis effectuez un enchaînement de commandes conditionnel avec les caractères &&. |
3. |
Utilisez le code retour de la commande ls pour savoir si le fichier /tmp/glop existe, puis effectuez un enchaînement de commandes conditionnel avec les caractères ||. |
Énoncé 8.4 Variables spéciales
Durée estimative : 30 minutes
1. |
Dans votre répertoire bin, créez le script shell 02varspec qui effectue les opérations suivantes :
Chaque affichage doit être précédé d’un énoncé (par exemple pour le nom du script : "mon nom est : nom_du_script_shell"). Puis modifiez les droits du fichier de façon à l’instancier par son nom. |
2. |
Affichez le PID de votre shell courant, puis exécutez le script 02varspec des trois manières suivantes : bash 02varspec 02varspec . 02Varspec Les résultats sont-ils ceux attendus ? |
3. |
Copiez le script 02varspec en 03param et modifiez ce dernier de façon à :
|
4. |
Testez votre script shell 03param avec les arguments suivants : a b c d "a b" c d a b c\ d a ’b c’ d |
5. |
Ajoutez les opérations suivantes dans le script 03param :
Testez de nouveau le script avec les arguments suivants : a b c d |
6. |
Modifiez le script 03param... |
Énoncé 8.5 Tests de fichiers
Durée estimative : 20 minutes
1. |
Dans votre répertoire bin, créez le script shell 04fichier qui effectue les tests suivants sur un fichier passé en argument :
|
2. |
Testez le script shell 04fichier avec successivement les fichiers /glop, /etc/hosts, /bin/ls et /home. |
Indice
1. |
Utilisez la commande test avec la syntaxe []. |
Énoncé 8.6 Tests de chaînes de caractères
Durée estimative : 15 minutes
1. |
Dans votre répertoire bin, créez le script shell 05chaine qui effectue les tests suivants sur deux chaînes de caractères passées en argument :
|
2. |
Testez le script shell 05chaine avec les arguments suivants : abc "" "" abc "" "" abc abc abc ABC abc "abc " |
Indice
1. |
Utilisez la commande test avec la syntaxe []. |
Énoncé 8.7 Tests et opérations arithmétiques
Durée estimative : 30 minutes
1. |
Dans votre répertoire bin, créez le script shell 06max qui retourne le plus grand des deux arguments passés en paramètres. Utilisez la commande test avec la syntaxe []. |
2. |
Testez le script shell 06max avec les arguments suivants : 12 12 34 12 6 12 12 12 " 34" |
3. |
Créez maintenant le script shell 07min qui retourne le plus petit des deux arguments passés en paramètres. Utilisez cette fois la commande let avec la syntaxe (()). |
4. |
Testez le script shell 07min avec les arguments suivants : 12 12 34 12 6 12 12 12 " 34" |
5. |
Créez le script shell 08div qui retourne le résultat de la division entière entre le premier et le second argument. |
6. |
Testez le script shell 08div avec les arguments suivants : 12 12 0 12 2 12 5 12 14 |
Indices
1. |
Effectuez les opérations suivantes dans le script :
|
3. |
Effectuez les opérations suivantes dans le script :
|
Énoncé 8.8 Scripts interactifs
Durée estimative : 10 minutes
1. |
Dans votre répertoire bin, créez le script shell 09mult qui demande de saisir deux nombres et qui retourne le résultat de la multiplication de ces deux nombres. |
2. |
Testez le script shell 09mult avec les nombres 12 et 3. |
Indice
1. |
Utilisez la commande read. |
Énoncé 8.9 Pour aller plus loin
Durée estimative : 30 minutes
1. |
Écrivez le script shell 10compar qui affiche le plus petit et le plus grand nombre parmi les arguments passés sur la ligne de commandes, le nombre d’arguments devant être supérieur à 1. |
2. |
Testez le script shell 10compar avec les arguments suivants : 1 1 2 1 2 3 3 5 2 6 1 8 7 |
3. |
Testez les environnements de développement graphiques installés sur votre système et rééditez les scripts shell précédents. |
Indice
1. |
Réutilisez les scripts 06max et 07min précédemment écrits. Utilisez une boucle while avec la commande shift pour traiter l’ensemble des arguments. |