TP No 2 - Shell Bash
Ce TP permet de se familiariser avec le shell Bash, en abordant des notions essentielles telles que la manipulation de chaînes de caractères, les boucles, la lecture au clavier, la gestion des fichiers et des répertoires, ainsi que la lecture et l’analyse de scripts de service Unix.
D'après le document TP No 2 - Shell Bash
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source
Operating Systems · PDF · 2 pages · 2012
Afficher l'aperçu du document
Ce TP permet de se familiariser avec le shell Bash, en abordant des notions essentielles telles que la manipulation de chaînes de caractères, les boucles, la lecture au clavier, la gestion des fichiers et des répertoires, ainsi que la lecture et l’analyse de scripts de service Unix. Pour réaliser ce TP, il est nécessaire d’avoir accès à un système Linux avec un shell Bash fonctionnel et aux fichiers système standards comme /etc/passwd.
Objectifs
- Écrire des scripts Bash pour manipuler des fichiers et leurs noms.
- Extraire et filtrer des informations à partir de fichiers système.
- Lire des entrées utilisateur au clavier et afficher des fichiers texte page par page.
- Tester la nature et les permissions des fichiers via des conditions dans un script.
- Afficher le contenu d’un répertoire en séparant fichiers et sous-répertoires.
- Analyser un script de service Unix pour comprendre son fonctionnement de base.
Prérequis et installation
- Un système d’exploitation Linux avec Bash installé.
- Accès en lecture aux fichiers système : /etc/passwd, /etc/init.d/network, /etc/sysconfig/network.
- Connaissances de base en ligne de commande Linux et en scripting Bash.
- Éditeur de texte (comme Emacs, Vim ou Nano) pour lire et modifier les scripts.
Exercice 1 - Itération, chaînes de caractères, expressions
Dans ce premier exercice, vous devez écrire un script Bash qui renomme tous les fichiers d’un répertoire dont les noms sont du type dcp_1234.jpg, DCP_1234.JPG, DCP_1234.jpg, etc., en les renommant sous la forme photo_1234.jpg, toujours en minuscules.
Cette étape permet de pratiquer la manipulation des noms de fichiers, la gestion des majuscules/minuscules, et l’utilisation de boucles pour traiter plusieurs fichiers.
Un résultat correct est un ensemble de fichiers renommés avec le préfixe « photo_ », les numéros conservés, et l’extension en minuscules « .jpg ».
Exercice 2 - Lister les utilisateurs
Écrire un script Bash qui affiche la liste des noms de login des utilisateurs définis dans /etc/passwd ayant un UID supérieur à 100.
Attention, la commande for in $(cat /etc/passwd) ne permet pas de parcourir correctement les lignes du fichier à cause des espaces et des séparateurs. Il faut donc utiliser la commande cut avec les bons arguments pour extraire uniquement les noms de login et les UIDs.
Ce script vous apprend à manipuler les fichiers système, à filtrer des données et à utiliser des commandes comme cut pour extraire des champs précis.
Exercice 3 - Lecture au clavier
Tester les commandes suivantes :
read: permet de lire une chaîne au clavier et de l’affecter à une variable.file: affiche des informations sur le contenu d’un fichier.moreetless: affichent un fichier texte page par page.
Questions à tester :
- Comment quitter
less? (toucheq) - Comment avancer d’une ligne ? (touche
Entrée) - Comment avancer d’une page ? (touche
espace) - Comment remonter d’une page ? (touche
b) - Comment chercher une chaîne de caractères ? Passer à l’occurrence suivante ? (touche
/pour chercher,npour occurrence suivante)
Ensuite, écrire un script qui propose à l’utilisateur de visualiser page par page chaque fichier texte du répertoire passé en argument. Le script doit :
- Utiliser la commande
filepour vérifier que le fichier est de type « text ». - Demander à l’utilisateur « voulez-vous visualiser le fichier machintruc ? ».
- Si la réponse est positive, lancer
lesssur ce fichier. - Puis passer au fichier texte suivant.
Exercice 4 - Créer un script test-fichier
Ce script doit préciser la nature du fichier passé en paramètre (fichier ordinaire ou répertoire) et ses permissions d’accès pour l’utilisateur qui lance le script.
Utiliser les conditions if/then/else/elif, les opérateurs de test du shell comme -d (répertoire), -f (fichier ordinaire), et les commandes de base telles que ls et cut.
Exemples de résultats attendus :
Le fichier /etc est un répertoire
"/etc" est accessible par root en lecture écriture exécutionLe fichier /etc/smb.conf est un fichier ordinaire qui n’est pas vide
"/etc/smb.conf" est accessible par jean en lecture.
Exercice 5 - Afficher le contenu d’un répertoire
Écrire un script Bash listdir.sh qui affiche le contenu d’un répertoire en séparant les fichiers des sous-répertoires.
Exemple d’utilisation :
./listdir.sh
Affichera :
Fichiers dans /etc/rc.d --------------------
--------------
rc
rc.local
--------------Répertoires dans /etc/rc.d --------------------
init.d
rc0.d
rc1.d
...
Cet exercice permet de pratiquer la lecture du contenu d’un répertoire et la classification des éléments selon leur type.
Exercice 6 - Étude d’un script de service Unix (lecture)
Ouvrir le fichier /etc/init.d/network en lecture seule avec un éditeur comme (X)Emacs.
Ce script gère le lancement et l’arrêt du service réseau, généralement via la commande service network start.
Vous devez répondre aux questions suivantes :
- Quels sont les arguments acceptés par le script sur la ligne de commande ? Que fait-il si un argument invalide est donné ?
- Que fait le script si le fichier
/etc/sysconfig/networkn’existe pas ? - Où est définie la fonction Bash « action » ?
- À quoi sert le fichier
/var/lock/subsys/network?
Cette étape permet de comprendre l’architecture d’un script de service et son mode de fonctionnement basique.
Résultats attendus
- Exercice 1 : Tous les fichiers renommés avec le préfixe « photo_ », les numéros conservés, et l’extension en minuscules « .jpg ».
- Exercice 2 : Liste des noms de login des utilisateurs avec UID > 100, sans erreurs liées à la lecture incorrecte du fichier /etc/passwd.
- Exercice 3 : Compréhension des commandes
read,file,lessetmore; script fonctionnel proposant la visualisation des fichiers texte. - Exercice 4 : Script indiquant correctement la nature du fichier et ses permissions d’accès, avec des messages similaires aux exemples fournis.
- Exercice 5 : Affichage clair et séparé des fichiers et répertoires dans un répertoire donné.
- Exercice 6 : Réponses précises aux questions sur le script /etc/init.d/network, montrant une compréhension de son fonctionnement.
Pièges courants
- Utiliser
for in $(cat /etc/passwd)pour parcourir les lignes de /etc/passwd : cela ne fonctionne pas correctement car la boucle parcourt les mots et non les lignes. Utiliserwhile IFS=: read ...oucutpour extraire les champs. - Ne pas gérer correctement la casse lors du renommage des fichiers (exercice 1). Il faut convertir les noms en minuscules.
- Oublier de vérifier que les fichiers sont bien de type texte avant de proposer leur visualisation (exercice 3).
- Ne pas tester l’existence du fichier ou répertoire passé en paramètre dans l’exercice 4, ce qui peut provoquer des erreurs.
- Confondre fichiers et répertoires dans l’affichage du contenu d’un répertoire (exercice 5).
- Ne pas lire attentivement le script /etc/init.d/network, ce qui empêche de répondre correctement aux questions sur ses arguments et son fonctionnement (exercice 6).
Commentaires
Aucun commentaire pour le moment. Posez la première question.