Bash est incroyablement flexible et offre différentes options pour tester les fichiers. Et si vous cherchez un moyen de tester vos fichiers, les opérateurs de test de fichiers Bash vous mèneront loin.
Dans ce tutoriel, vous apprendrez différents opérateurs de test de fichiers et comment les utiliser pour tester si un fichier existe, est lisible, est vide, et ainsi de suite.
Lisez la suite et devenez ami avec les opérateurs de test de fichiers Bash !
Prérequis
Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d’avoir ce qui suit :
- A Linux system with Bash installed – This tutorial uses Ubuntu 20.04.
La plupart des distributions Linux ont Bash installé par défaut. Mais si vous utilisez Windows, vous pouvez installer le sous-système Windows pour Linux (WSL) pour obtenir un shell Bash.
- A user account with sudo privileges to run commands as root – This tutorial uses a root account for simplicity. But using a non-root user with sudo access is always recommended.
- Ce tutoriel suppose que vous avez un accès SSH à votre système Linux.
Quels sont les opérateurs de test de fichiers Bash?
Avant de vous salir les mains avec les opérateurs de test, jetez un coup d’œil à leur fonctionnement. Les opérateurs de test de fichiers vous permettent de tester différents aspects d’un fichier comme son existence, sa lisibilité/écriture, etc.
L’utilisation des opérateurs de test de fichiers peut aider à prévenir les erreurs dans vos scripts Bash. Le code ci-dessous est un canevas pour l’instruction if. L’instruction if-else est un outil puissant que vous verrez souvent dans les scripts Bash.
Rappelez-vous que les parties then et else du bloc de code sont facultatives. Vous pouvez utiliser une instruction if sans elles.
Vérification de l’existence d’un fichier
Vous avez vu un aperçu de comment les opérateurs de test fonctionnent, mais ce n’est pas suffisant pour mieux comprendre les tenants et aboutissants de leur utilisation. Commencez donc par un exemple de base, comme vérifier si un fichier existe.
Dans le monde réel, vous voudrez peut-être vérifier si un fichier de configuration existe avant d’en créer un. Vous ne voulez pas perdre de temps à construire un fichier de configuration à partir de zéro juste pour découvrir que le même existe déjà.
Pour vérifier si un fichier existe déjà:
1. Ouvrez votre terminal et exécutez la commande touch ci-dessous pour créer un nouveau fichier test.txt . Cette commande ne fournit pas de sortie, mais vous vérifierez le fichier à l’étape suivante.
2. Ensuite, exécutez la commande ls suivante pour lister le fichier nouvellement créé (test.txt) dans votre répertoire de travail.
La sortie ci-dessous confirme que vous avez créé avec succès le fichier test.txt.
Maintenant que vous avez un fichier de test, vous pouvez utiliser le bloc de code de base dans un script Bash pour vérifier si le fichier existe dans les étapes suivantes.

3. Exécutez la commande ci-dessous pour créer (touch), et ouvrir un nouveau fichier de script shell (if_file_exists.sh) dans votre éditeur de texte préféré (nano).
4. Ensuite, insérez le code ci-dessous dans votre nouveau fichier if_file_exists.sh , enregistrez le fichier et fermez l’éditeur.
- Exécute une déclaration if-else pour vérifier si un fichier spécifié existe.
- Si l’opérateur renvoie vrai, vous obtiendrez un message indiquant que le fichier existe.
- Si l’opérateur renvoie faux, vous obtiendrez un message indiquant que le fichier n’existe pas. Mais cette fois, le fichier est créé automatiquement en utilisant le nom que vous avez défini dans la variable FILE.
La ligne #!/bin/bash en haut du fichier est appelée shebang. Un shebang indique à votre système quel interpréteur utiliser pour exécuter le script, dans ce cas, Bash. Si vous n’incluez pas de shebang, votre système utilise l’interpréteur par défaut, qui peut ne pas être Bash. L’absence de shebang peut entraîner l’échec de votre script.
5. Exécutez la commande ci-dessous pour exécuter votre nouveau script (if_file_exists.sh)
Si tout se passe bien, vous verrez le message indiquant que test.txt existe imprimé dans votre terminal, comme illustré ci-dessous.

6. Ensuite, exécutez les commandes suivantes pour supprimer (rm -rf) le fichier de test (test.txt) et lister tous les fichiers de votre répertoire de travail.
Ci-dessous, vous pouvez vérifier que le fichier test.txt n’est plus répertorié.

7. Relancez la commande ci-dessous pour exécuter votre script if_file_exists.sh.
Étant donné que le fichier test.txt n’existe plus, le script crée un nouveau fichier test.txt lorsque l’opérateur -e renvoie false.

8. Enfin, exécutez la commande ls ci-dessous pour répertorier le fichier test.txt dans votre répertoire de travail.
La sortie ci-dessous confirme que votre script a créé un nouveau fichier test.txt.

Vérification si un fichier est un fichier ordinaire ou spécial
Avant d’ouvrir ou de traiter un fichier, vous voudrez peut-être vérifier d’abord si ce fichier est ordinaire ou spécial. Pourquoi? Un fichier spécial est un type de fichier stocké dans un système de fichiers, alors faites attention de ne pas jouer avec ces fichiers.
Par exemple, une erreur courante lors de l’ouverture d’un fichier spécial est l’erreur « Aucun fichier ou dossier de ce type ». Cette erreur se produit lorsque le fichier que vous essayez d’ouvrir n’existe pas. Mais la même erreur peut également se produire lors de l’ouverture d’un fichier spécial au lieu d’un fichier ordinaire.
Ouvrez un nouveau fichier special_file.sh dans votre éditeur de texte, ajoutez le code suivant et enregistrez les modifications.
Le code ci-dessous est similaire à celui précédent. Mais ce code utilise l’opérateur -f
au lieu de l’opérateur -e
. L’opérateur -f
teste si un fichier spécifié (/dev/vmmon
) est un fichier régulier.
Maintenant, exécutez la commande ci-dessous pour exécuter votre script special_file.sh
.
Étant donné que le fichier (/dev/vmmon) spécifié dans la variable FILE
est un fichier spécial, vous obtiendrez le message ci-dessous.

Vérification de l’existence d’un répertoire
Jusqu’à présent, vous avez appris à vérifier si un fichier existe. Mais la même méthode s’applique-t-elle aux répertoires ? Oui, en utilisant l’opérateur de test -d
. Cet opérateur est pratique si vous prévoyez d’agir en fonction de l’existence ou non d’un répertoire.
Peut-être souhaitez-vous copier tous les fichiers d’un répertoire vers un autre. Si le répertoire cible n’existe pas, vous pouvez le créer avant de copier les fichiers.
1. Exécutez la commande ls ci-dessous pour afficher la liste de example-dir à partir du répertoire de travail.
Vous obtiendrez un message indiquant « Aucun fichier ou dossier de ce type » car le répertoire n’existe pas. Si vous ne souhaitez pas interrompre le déroulement en cas d’absence de répertoire, passez à l’étape suivante.

2. Ensuite, ouvrez un nouveau fichier nommé si_rep_existe.sh dans votre éditeur de texte, ajoutez le code ci-dessous et enregistrez le fichier. Le code suivant teste si un répertoire spécifié existe et effectue des actions en fonction de la valeur renvoyée par l’opérateur -d.
Vous pouvez obtenir le même résultat en inversant les instructions if et else en utilisant l’opérateur de négation (!). Dans des situations réelles, l’opérateur ! peut aider à écrire un script plus propre et plus concis.
3. Maintenant, exécutez la commande ci-dessous pour exécuter votre script (si_rep_existe.sh)
Vous pouvez voir le message indiquant que le répertoire a été créé et que le fichier test.txt a été copié, car le répertoire example_dir n’existe pas.

4. Enfin, exécutez la commande ls sur le répertoire example_dir pour confirmer que le répertoire existe et contient le fichier test.txt.

Vérification si un fichier est vide
Vous savez déjà comment utiliser les trois opérateurs de test de fichier les plus utilisés (-e, -f et -d) pour améliorer vos compétences en script. Mais il existe d’autres opérateurs que vous aimeriez explorer.
Généralement, au lieu de mettre en surbrillance le contenu d’un fichier pour le copier dans un autre fichier, vous exécuteriez une commande pour effectuer le travail à votre place. Mais attendez-vous, car votre fichier cible pourrait ne pas être vide.
Pourquoi ne pas utiliser l’opérateur -s
pour vérifier si un fichier existe et n’est pas vide ? Cet opérateur renvoie vrai si le fichier existe et a une taille supérieure à zéro.
1. Ouvrez un nouveau fichier nommé empty_file.sh dans votre éditeur de texte, ajoutez le code suivant et enregistrez le fichier.
Le code suivant teste si un fichier spécifié est vide et affiche un message en fonction de la valeur renvoyée par l’opérateur -s.
2. Maintenant, exécutez la commande ci-dessous pour exécuter votre script (empty_file.sh).
Vous pouvez voir ci-dessous le message indiquant que test.txt n’existe pas ou est vide. Mais simultanément, le script ajoute du texte au fichier test.txt.

3. Exécutez la commande cat ci-dessous pour vérifier que le fichier test.txt contient le texte ajouté.

4. Enfin, réexécutez la commande bash ci-dessous pour exécuter le script empty_file.sh.
Vous pouvez voir ci-dessous que la sortie a changé pour test.txt existe et n’est pas vide, puisque le fichier test.txt contient maintenant du texte et a une taille supérieure à zéro (0).

Vérifier si un fichier existe et est lisible
Peut-être que votre automatisation implique de lire des fichiers pour effectuer des tâches. Le succès de ces tâches dépendra de la lisibilité des fichiers. Écrire un script pour vérifier si un fichier existe et est lisible sera utile comme solution.
Pour démontrer la vérification de l’existence et de la lisibilité d’un fichier :
1. Exécutez la commande suivante pour vous connecter à un autre compte utilisateur (ata).
Votre invite ($) change pour indiquer que vous êtes connecté en tant qu’autre utilisateur.

Alternativement, vous pouvez modifier les autorisations du fichier pour le rendre lisible, inscriptible, ou les deux avec la commande chmod.
2. Une fois connecté, créez un nouveau fichier appelé readable_file.sh avec votre éditeur de texte
Ajoutez le code suivant au fichier readable_file.sh et enregistrez les modifications. Ce code vérifie si un fichier appelé test.txt dans le répertoire /root existe et est lisible.
3. Maintenant, exécutez la commande ci-dessous pour exécuter le script readable_file.sh.
Cette fois, vous verrez un message indiquant que le fichier /root/test.txt n’existe pas ou n’est pas lisible. Étant donné que le fichier text.test est situé dans le répertoire /root, l’utilisateur actuel (ata) n’a pas les autorisations de lecture pour le fichier text.txt.

4. Enfin, exécutez les commandes ci-dessous pour effectuer les opérations suivantes :
- Modifiez le fichier sudoers pour permettre à l’utilisateur actuel (ata) d’utiliser
sudo
pour exécuter des commandes élevées.
- Exécutez le script readable_file.sh, qui teste si un fichier spécifique est lisible.
Vous pouvez voir ci-dessous que la sortie imprime que test.txt existe et est lisible car l’utilisateur ata a maintenant la permission de lire le fichier test.txt.

Conclusion
A testing phase is always a priority before making drastic changes, whether on files or directories on your system. And in this tutorial, you’ve learned about the Bash file test operators and how to use them to test if a file (regular or special) or directory exists or if a file is readable or not.
Avec ces compétences nouvellement acquises, vous pouvez décider en toute confiance de l’action à prendre en fonction du résultat des tests. Mais il existe de nombreuses autres façons d’utiliser les opérateurs de test de fichiers Bash.
Pourquoi ne pas essayer de vérifier l’extension d’un fichier ? Ou peut-être vérifier si plusieurs fichiers existent pour voir si tous les fichiers dont vous avez besoin sont disponibles ?