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
forpour 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
forpour 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
$1pour 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
ifavec 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
basenameest très utile pour extraire uniquement le nom du fichier à partir d'un chemin complet. Par exemple,basename /home/labex/project/file1.txtrenverrafile1.txt. - La commande
catpermet 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>.
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.



