Créer des scripts Shell avec des boucles

Red Hat Enterprise LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce défi, vous allez apprendre à concevoir un script shell simple exploitant des structures de boucles (telles que for et while) pour traiter des fichiers ou des arguments passés en ligne de commande. La rédaction de scripts shell est un levier puissant pour automatiser les tâches redondantes et fluidifier vos méthodes de travail. En relevant ce défi, vous acquerrez une expérience concrète dans le développement de scripts capables de gérer des entrées dynamiques et d'exécuter diverses opérations système.

Créer un script Shell avec une boucle for

Au cours de cette étape, vous allez élaborer un script shell utilisant une boucle for pour parcourir la liste des fichiers d'un répertoire et effectuer une opération sur chacun d'eux. Ce script illustrera comment traiter plusieurs fichiers de manière dynamique, une compétence fondamentale en administration système.

Tâches

  • Créer un script shell qui utilise une boucle for pour itérer à travers les fichiers d'un répertoire spécifié.
  • Pour chaque fichier identifié, le script doit afficher le nom du fichier ainsi que son contenu.

Exigences

  • Le script doit être nommé list_files.sh.
  • Le script doit être situé dans le répertoire ~/project.
  • Le script doit impérativement commencer par le shebang #!/bin/bash.
  • Le script doit accepter un chemin de répertoire comme premier argument de ligne de commande.
  • Le script doit utiliser une boucle for pour parcourir les éléments à l'intérieur du répertoire fourni.
  • Pour chaque fichier régulier rencontré, le script doit afficher "File: " suivi du nom de base du fichier, puis afficher l'intégralité du contenu du fichier.
  • Si aucun argument de répertoire n'est fourni, le script doit afficher un message d'utilisation et s'arrêter avec un code d'état d'erreur (non nul).

Exemple

Supposons que vous ayez créé le script list_files.sh dans ~/project et que vous l'ayez rendu exécutable. Lorsque vous l'exécutez avec ~/project comme argument, le résultat devrait ressembler à ceci :

[labex@host ~]$ cd ~/project
[labex@host project]$ chmod +x list_files.sh
[labex@host project]$ ./list_files.sh ~/project
File: file1.txt
Content of file1.txt

File: file2.txt
Content of file2.txt

File: file3.txt
Content of file3.txt

[labex@host project]$

Si vous lancez le script sans argument, il doit afficher les instructions d'utilisation :

[labex@host project]$ ./list_files.sh
Usage: ./list_files.sh <directory_path>
[labex@host project]$ echo $?
1
[labex@host project]$

Le contenu exact affiché dépendra bien entendu des fichiers présents dans votre répertoire.

Astuces

  • Utilisez la variable spéciale $1 pour accéder au premier argument passé à votre script.
  • Pour parcourir les fichiers d'un répertoire, vous pouvez utiliser un motif de substitution (wildcard) tel que "$1"/*.
  • Utilisez une structure if avec l'opérateur de test -f (par exemple, if [ -f "$file" ]) pour vérifier qu'un élément est bien un fichier régulier et non un dossier.
  • La commande basename est très utile pour extraire uniquement le nom du fichier à partir d'un chemin complet. Par exemple, basename /home/labex/project/file1.txt renverra file1.txt.
  • La commande cat permet d'afficher le contenu d'un fichier.
  • N'oubliez pas de rendre votre script exécutable avec chmod +x.
  • Pour vérifier si une variable est vide, vous pouvez utiliser if [ -z "$variable" ].
  • Pour quitter un script avec un code d'état spécifique, utilisez exit <status_code>.
✨ Vérifier la solution et pratiquer

Résumé

Dans ce défi, vous avez appris à concevoir un script shell simple utilisant une boucle for pour parcourir les fichiers d'un répertoire et agir sur chacun d'eux. Vous vous êtes exercé à manipuler les arguments de ligne de commande, à valider les entrées utilisateur et à utiliser des structures conditionnelles (if) pour filtrer les fichiers réguliers. Vous avez également utilisé basename pour isoler les noms de fichiers et cat pour en extraire le contenu. Ces compétences sont fondamentales pour l'automatisation des tâches, le traitement de données et la gestion efficace des fichiers dans un environnement Linux, des piliers essentiels pour la certification RHCSA et l'administration système au quotidien.