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.

TP No 2 - Shell Bash

Document source

TP No 2 - Shell Bash

Operating Systems · PDF · 2 pages · 2012

Afficher l'aperçu du document

Consulter le document original →

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.
  • more et less : affichent un fichier texte page par page.

Questions à tester :

  • Comment quitter less ? (touche q)
  • 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, n pour 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 file pour 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 less sur 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écution

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

  1. Quels sont les arguments acceptés par le script sur la ligne de commande ? Que fait-il si un argument invalide est donné ?
  2. Que fait le script si le fichier /etc/sysconfig/network n’existe pas ?
  3. Où est définie la fonction Bash « action » ?
  4. À 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, less et more ; 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. Utiliser while IFS=: read ... ou cut pour 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).

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions