logo

Bash vérifie si le fichier existe

La plupart du temps, nous pouvons trouver une situation dans laquelle nous devrons effectuer une action qui vérifiera si un fichier existe ou non.

Dans Bash, nous pouvons utiliser une « commande de test » pour vérifier si un fichier existe et déterminer le type d'un fichier.

Voici les syntaxes de la commande test, et nous pouvons utiliser n'importe laquelle de ces commandes :

 test expression [ expression ] [[ expression ]] 

Nous devons utiliser une seule commande '[' entre crochets pour rendre notre script portable pour tous les shells POSIX. La version mise à niveau de la commande test contient des doubles crochets '[[' qui sont pris en charge sur la plupart des systèmes modernes utilisant Bash, Zsh et Ksh comme shell par défaut.

Vérifier si le fichier existe

Lors de la vérification si un fichier existe, les opérateurs de fichiers les plus couramment utilisés sont -e et -f. L'option '-e' est utilisée pour vérifier si un fichier existe quel que soit son type, tandis que l'option '-f' est utilisée pour renvoyer la valeur vraie uniquement si le fichier est un fichier normal (pas un répertoire ou un périphérique).

L'option la plus courante pour vérifier si le fichier existe ou non consiste à utiliser la commande test avec l'instruction conditionnelle if.

Voici les exemples pour vérifier si le fichier 'read_file.txt' existe :

Méthode 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Méthode 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Méthode 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Sortir

Le résultat pour les trois méthodes sera le suivant car nous avons un fichier (read_file.txt) présent dans le répertoire :

chaînes en c
 read_file.txt exist 

Si nous voulons effectuer une action qui fournira un résultat selon que le fichier existe ou non, nous pouvons utiliser la construction if/then de la manière suivante :

Exemple

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Sortir

 read_file.txt exist 

Nous pouvons également utiliser la commande test sans l'instruction if. Nous pouvons utiliser l’une des méthodes suivantes :

Méthode 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Méthode 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Méthode 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Sortir

Le résultat pour les trois méthodes sera le suivant car nous avons un fichier (read_file.txt) présent dans le répertoire :

 read_file.txt exist 

S'il y a plusieurs commandes à exécuter après l'opérateur &&, placez les commandes entre accolades séparées par un point-virgule (;) ou AND (&&), c'est-à-dire :

parcours de précommande

Exemple

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

Contrairement à &&, l'instruction après le || L'opérateur n'est exécuté que si l'état de sortie de la commande de test est « faux ».

Exemple

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Sortir

 read_file.txt exist 

Ce sont les méthodes couramment utilisées dans Bash pour vérifier si le fichier existe ou non.

Vérifier si le répertoire existe

L'opérateur '-d' nous permet de tester si un fichier est un répertoire ou non.

Voici les méthodes pour vérifier si le répertoire « Javapoint » existe :

Méthode 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Méthode 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Note:Nous pouvons également utiliser des doubles crochets '[[' au lieu d'un simple crochet '['.

Sortir

Le résultat des deux méthodes ci-dessus sera le suivant car nous avons un répertoire (nommé Javatpoint) présent à l'emplacement spécifié :

 Javatpoint is a directory 

Vérifiez SI le fichier n'existe pas

L'expression de test peut être annulée en utilisant le point d'exclamation (! -opérateur NOT logique). Consultez l'exemple suivant :

Exemple

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Le script ci-dessus peut également être écrit comme ci-dessous :

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Sortir

 missing_read_file.txt unavailable 

Opérateurs de test de fichiers

Les commandes de test incluent les opérateurs de fichiers suivants qui nous permettent de tester des types particuliers de fichiers :

-b Retours de fichiers 'True' si le FILE existe en tant que fichier spécial bloc.
-c Retours de fichiers 'True' si le FILE existe en tant que fichier de caractères spéciaux.
-d Retours de fichiers 'Vrai' si le FICHIER existe en tant que répertoire.
-e Retours de fichiers 'True' si le FILE existe sous forme de fichier, quel que soit son type (nœud, répertoire, socket, etc.).
-f Retours de fichiers « Vrai » si le FICHIER existe en tant que fichier normal (et non en tant que répertoire ou périphérique).
-G retours de fichiers « Vrai » si le FICHIER existe et contient le même groupe que celui où l'utilisateur exécute la commande.
-h Retours de fichiers « Vrai » si le FICHIER existe sous forme de lien symbolique.
-g Retours de fichiers « Vrai » si le FICHIER existe et contient un ensemble d'indicateurs set-group-id (sgid).
-k retours de fichiers « Vrai » si le FICHIER existe et contient un ensemble d'indicateurs de bits persistants.
-L retours de fichiers « Vrai » si le FICHIER existe sous forme de lien symbolique.
-O retours de fichiers « Vrai » si le FICHIER existe et appartient à l'utilisateur qui exécute la commande.
-p Retours de fichiers 'True' si le FILE existe sous forme de tube.
-r Retours de fichiers « Vrai » si le FICHIER existe sous forme de fichier lisible.
-S retours de fichiers 'True' si le FILE existe en tant que socket.
-s Retours de fichiers « Vrai » si le FICHIER existe et a une taille non nulle.
-u Retours de fichiers « Vrai » si le FILE existe et que l'indicateur set-user-id (suid) est défini.
-w Retours de fichiers « Vrai » si le FICHIER existe sous forme de fichier inscriptible.
-x Retours de fichiers « Vrai » si le FICHIER existe sous forme de fichier exécutable.