Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Linux
  3. Énoncé 8 : Programmation et scripts Bash
Extrait - Linux Entraînez-vous sur les commandes de base : Exercices et corrigés (5e édition)
Extraits du livre
Linux Entraînez-vous sur les commandes de base : Exercices et corrigés (5e édition) Revenir à la page d'achat du livre

É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 :

  • Affecter la chaîne de caractères "abc" à la variable var.

  • Afficher la chaîne de caractères "la variable $var a pour valeur :" suivie du contenu de la variable var.

  • Effectuer une pause de trois secondes.

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 :

  • Afficher le nom du script shell

  • Afficher le PID du script shell.

  • Afficher le PID du processus père.

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 à :

  • afficher le nombre d’arguments passés sur la ligne de commandes,

  • afficher les trois premiers paramètres positionnels.

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 :

  • Décaler les paramètres positionnels de deux rangs.

  • Afficher de nouveau les trois premiers paramètres positionnels.

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 :

  • Si le fichier n’existe pas, sortir avec un code retour égal à 1.

  • Afficher si le fichier est un fichier standard ou non.

  • Afficher si le fichier est un répertoire ou non.

  • Afficher les autorisations que vous possédez sur le fichier (lecture, écriture et exécution).

  • Afficher si le fichier contient des données ou non.

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 :

  • Si au moins une des deux chaînes de caractères passées en argument est nulle, sortir avec un code retour égal à 1.

  • Afficher si les chaînes de caractères sont identiques ou non.

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 :

  • Si le nombre d’arguments est différent de 2, sortir avec un code retour égal à 1.

  • Afficher le nombre le plus grand ou la valeur du premier en cas d’égalité.

3.

Effectuez les opérations suivantes dans le script :

  • Si le nombre d’arguments est différent de 2, sortir avec un code retour égal à 1.

  • Afficher le nombre le plus petit ou la valeur du premier en cas d’égalité....

É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.