J'ai utilisé le script suivant pour voir si un fichier existe :
#!/bin/bash
FILE=$1
if [ -f $FILE ]; then
echo "File $FILE exists."
else
echo "File $FILE does not exist."
fi
Quelle est la syntaxe correcte à utiliser si je veux seulement vérifier si le fichier fait no existent ?
#!/bin/bash
FILE=$1
if [ $FILE does not exist ]; then
echo "File $FILE does not exist."
fi
209 votes
J'ai trouvé ceci liste des instructions conditionnelles de bash très utile.
11 votes
Étant la personne très paresseuse que je suis, j'aurais typiquement utilisé la construction de contournement stupide suivante :
if [ -f $FILE ]; then; else; echo "File $FILE does not exist."; fi;
C'est probablement une bonne chose que j'aie trouvé cette question à la place et que j'aie appris à le faire d'une manière plus correcte :)6 votes
Pour être pendulaire, vous devriez dire "fichier ordinaire", car la plupart des documents UNIX/POSIX font référence de manière générique à tous les types d'entrées du système de fichiers par le simple terme "fichiers", par exemple, un lien symbolique est un type de fichier, tout comme un tuyau nommé, un fichier ordinaire, un répertoire, un bloc spécial, un caractère spécial, une socket, etc.
11 votes
@kevinarpe si vous voulez tester si quelque chose existe, utilisez
-e
. -f ne récupère pas les répertoires, les liens symboliques, etc.15 votes
Pour être sûr, utilisez toujours des guillemets doubles pour gérer correctement les noms de fichiers avec des espaces, par exemple,
FILE=$1
->FILE="$1"
yif [ -f $FILE ];
->if [ -f "$FILE" ];
0 votes
Malheureusement, cette méthode est sujette à des conditions de course et n'est pas utile dans la plupart des cas, à l'exception d'exemples triviaux de type "hello world".
1 votes
A propos de votre variable "$FILE" : Par convention, les variables d'environnement (PATH, EDITOR, SHELL, ...) et les variables internes de l'interpréteur de commandes (BASH_VERSION, RANDOM, ...) sont entièrement capitalisées. Tous les autres noms de variables doivent être en minuscules. Puisque les noms de variables sont sensibles à la casse, cette convention évite d'écraser accidentellement les variables d'environnement et internes.
0 votes
Duplicata possible de Bash : Comment vérifier si certains fichiers existent ?
3 votes
@jww C'est le contraire de cette question. Il s'agit de demander une syntaxe spécifique.