file-io if elif - Comment savoir si un fichier standard n'existe pas dans Bash?





8 Answers

Test de fichier Bash

-b filename - Bloquer le fichier spécial
-c filename - Fichier de caractères spéciaux
-d directoryname - Vérifie l'existence du répertoire.
-e filename - Vérifie l'existence du fichier, quel que soit son type (nœud, répertoire, socket, etc.)
-f filename - Vérifie l'existence d'un fichier normal et non d'un répertoire
-G filename - Vérifie si le fichier existe et appartient à l'ID du groupe effectif
-G filename set-group-id - True si le fichier existe et correspond à set-group-id
-k filename - bit collant
-L filename - lien symbolique
-O filename - Vrai si le fichier existe et appartient à l'ID utilisateur effectif
-r filename - Vérifie si le fichier est lisible
-S filename - Vérifie si le fichier est un socket
-s filename - Vérifie si la taille du fichier est différente de zéro
-u filename - Vérifie si le bit set-user-id du fichier est défini
-w filename - Vérifie si le fichier est accessible en écriture
-x filename - Vérifie si le fichier est exécutable

Comment utiliser:

#!/bin/bash
file=./file
if [ -e "$file" ]; then
    echo "File exists"
else 
    echo "File does not exist"
fi 

Une expression de test peut être annulée à l'aide de ! opérateur

#!/bin/bash
file=./file
if [ ! -e "$file" ]; then
    echo "File does not exist"
else 
    echo "File exists"
fi 
variable openclassroom while

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 n'existe pas ?

#!/bin/bash

FILE=$1     
if [ $FILE does not exist ]; then
   echo "File $FILE does not exist."
fi



[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"

En outre, il est possible que le fichier soit un lien symbolique brisé, ou un fichier non standard, comme par exemple un socket, un périphérique ou un fifo. Par exemple, pour ajouter une vérification des liens symboliques rompus:

if [[ ! -f $FILE ]]; then
    if [[ -L $FILE ]]; then
        printf '%s is a broken symlink!\n' "$FILE"
    else
        printf '%s does not exist!\n' "$FILE"
    fi
fi



Je préfère effectuer les opérations à une ligne suivantes, au format compatible avec le shell POSIX :

$ [ -f "/$DIR/$FILE" ] || echo "$FILE NOT FOUND"

$ [ -f "/$DIR/$FILE" ] && echo "$FILE FOUND"

Pour quelques commandes, comme je le ferais dans un script:

$  [ -f "/$DIR/$FILE" ] || { echo "$FILE NOT FOUND" ; exit 1 ;}

Une fois que j'ai commencé à faire cela, j'utilise rarement la syntaxe entièrement typée!




Vous devez être prudent lors de l'exécution du test pour une variable non citée, car elle pourrait produire des résultats inattendus:

$ [ -f ]
$ echo $?
0
$ [ -f "" ]
$ echo $?
1

Il est généralement recommandé de mettre la variable testée entre guillemets:

#!/bin/sh
FILE=$1

if [ ! -f "$FILE" ]
then
   echo "File $FILE does not exist."
fi



Tu peux le faire:

[[ ! -f "$FILE" ]] && echo "File doesn't exist"

ou

if [[ ! -f "$FILE" ]]; then
    echo "File doesn't exist"
fi

Si vous voulez vérifier le fichier et le dossier, utilisez l'option -e au lieu de -f . -e renvoie true pour les fichiers normaux, les répertoires, les sockets, les fichiers spéciaux de caractères, le blocage de fichiers spéciaux, etc.




Pour inverser un test, utilisez "!". Cela équivaut à l'opérateur logique "pas" dans d'autres langues. Essaye ça:

if [ ! -f /tmp/foo.txt ];
then
    echo "File not found!"
fi

Ou écrit d'une manière légèrement différente:

if [ ! -f /tmp/foo.txt ]
    then echo "File not found!"
fi

Ou vous pouvez utiliser:

if ! [ -f /tmp/foo.txt ]
    then echo "File not found!"
fi

Ou, présidant tous ensemble:

if ! [ -f /tmp/foo.txt ]; then echo "File not found!"; fi

Ce qui peut être écrit (en utilisant then "et" operator: &&) comme:

[ ! -f /tmp/foo.txt ] && echo "File not found!"

Ce qui ressemble plus court à ceci:

[ -f /tmp/foo.txt ] || echo "File not found!"



Le test peut aussi compter. Cela a fonctionné pour moi (basé sur Bash Shell: Check File Exists or Not ):

test -e FILENAME && echo "File exists" || echo "File doesn't exist"



Ce script shell fonctionne également pour trouver un fichier dans un répertoire:

echo "enter file"

read -r a

if [ -s /home/trainee02/"$a" ]
then
    echo "yes. file is there."
else
    echo "sorry. file is not there."
fi



Related