Si vous travaillez sur un script Bash qui interagit avec des fichiers et des répertoires, vous pouvez rencontrer une situation dans laquelle vous devez vous assurer que le fichier ou le répertoire existe. Cela permet d'éviter d'éventuelles erreurs lors de l'exécution de certaines actions sur un fichier qui n'existe pas.
Dans ce tutoriel, je vais vous montrer quelques façons de vérifier si le fichier ou le répertoire existe dans le script bash ou non. Commençons d'abord par le fichier.
Vérifier si le fichier existe dans le script bash
L'idée ici est d'utiliser l'opérateur -f qui renvoie true uniquement lorsqu'il s'agit d'un fichier normal (et non d'un répertoire).
Disons que vous voulez vérifier si le fichier /home/user/my_file existe ou non. Voici comment vous pouvez vérifier avec des crochets
#!/bin/bash
if [ -f /home/user/my_file ]
then
echo "My file exists"
fi
Mais vous n'obtiendrez pas toujours le nom du fichier à l'avance, n'est-ce pas ? Vous pouvez l'avoir dans une variable et si c'est le cas, vous pouvez l'utiliser de cette façon.
#!/bin/bash
FILE=/home/user/my_file
if [ -f "$FILE" ]
then
echo "My file exists"
else
echo "My file doesn't exist"
fi
Fondamentalement, ce qui compte, c'est la condition que vous utilisez dans la commande if. C'est à vous de décider comment vous voulez utiliser l'instruction if.
Par exemple, vous pouvez l'écrire avec deux crochets, garder « alors » dans la même ligne que « si » à l'aide d'un point-virgule comme ceci :
#!/bin/bash
FILE=/home/user/my_file
if [ -f "$FILE" ]; then
echo "My file exists"
else
echo "My file doesn't exist"
fi
ou assemblez l'intégralité de la déclaration comme ceci :
[ -f /home/user/my_file ] && echo "My file exists" || echo "My file doesn't exist"
Vérifier que le fichier existe dans bash avec test
Vous pouvez également utiliser test in bash pour voir si le fichier existe ou non. C'est à peu près la même chose sauf que vous n'utilisez pas les crochets dans l'instruction if :
#!/bin/bash
FILE=/home/user/my_file
if test -f "$FILE"
then
echo "My file exists"
else
echo "My file doesn't exist"
fi
Vous pouvez également utiliser le code ci-dessus sur une seule ligne comme ceci :
test -f /home/user/my_file && echo "My file exists" || echo "My file doesn't exist"
Vérifier si le fichier n'existe pas dans le script bash
Et si c'est l'inverse et que vous voulez vérifier si le fichier n'existe pas dans bash ? Vous pouvez utiliser à peu près le même code que ci-dessus en utilisant l'opérateur de négation :
#!/bin/bash
FILE=/home/user/my_file
if [ ! -f "$FILE" ]
then
echo "My file doesn't exist"
fi
Maintenant que vous savez comment gérer les fichiers, passons aux répertoires.
Vérifier si le répertoire existe dans le script bash
Le code de vérification du répertoire est le même que celui que vous avez vu dans la section précédente. La seule différence est que vous utiliserez -d au lieu de -f. -d renvoie true uniquement pour les répertoires.
#!/bin/bash
if [ -d /home/user/my_dir ]
then
echo "My directory exists"
fi
Vous pouvez également utiliser le test ici :
#!/bin/bash
DIR=/home/user/my_dir
if test -d "$DIR"
then
echo "My directory exists"
else
echo "My directory doesn't exist"
fi
Vérifier si le répertoire n'existe pas dans bash
Vous pouvez réutiliser la négation pour vérifier si le répertoire n'existe pas :
#!/bin/bash
DIR=/home/user/my_dir
if [ ! -d "$DIR" ]
then
echo "My directory doesn't exist"
fi
C'est ça. C'est tout ce que vous avez à faire pour vérifier si un répertoire de fichiers existe ou non dans le shell bash.
J'espère que vous trouverez cette astuce bash utile. Si vous avez des questions ou des suggestions, n'hésitez pas à laisser un commentaire ci-dessous.