Maison  >  Article  >  Opération et maintenance  >  Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

青灯夜游
青灯夜游original
2019-03-22 16:33:494795parcourir

Souvent, lors de l'écriture de scripts Shell, vous devez effectuer des opérations en fonction de l'existence ou non d'un fichier. Alors comment vérifier si le fichier existe ? L'article suivant vous montrera comment utiliser la commande test pour vérifier si un fichier ou un répertoire existe dans Bash. J'espère que cela vous sera utile.

Comment vérifier si un fichier ou un répertoire existe dans Bash

commande test

Dans Bash, vous pouvez utiliser la commande test pour vérifier si un fichier existe et identifiez le type de fichier.

La commande test prend l'une des formes de syntaxe suivantes :

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Si vous souhaitez que votre script soit portable, vous devez préférer utiliser l'ancienne commande test [, disponible sur tous Coquilles POSIX. Une nouvelle version mise à niveau de la commande test [[ (doubles crochets) est prise en charge sur la plupart des systèmes modernes utilisant bash, zsh et ksh comme shell par défaut.

Opérateurs de fichiers de la commande test

La commande test comprend les opérateurs de fichiers suivants, permettant de tester des types spécifiques de fichiers :

Quantity -b FILE : vrai si FILE existe et est un fichier spécial de bloc.

Quantity -c FILE : Vrai si FILE existe et est un fichier de caractères spéciaux.

Quantity -d FILE : Vrai si FILE existe et est un répertoire.

Quantity -e FILE : Vrai si FILE existe et est un fichier, quel que soit son type (nœud, répertoire, socket, etc.).

Quantity -f FILE : Vrai si FILE existe et est un fichier normal (pas un répertoire ou un périphérique).

● -G FILE : Vrai si FILE existe et est dans le même groupe que l'utilisateur exécutant la commande.

Quantity -h FILE : Vrai si FILE existe et est un lien symbolique.

● -g FILE : Vrai si FILE existe et que l'indicateur set-group-id (sgid) est défini.

Quantity -k FILE : Vrai si FILE existe et que l'indicateur sticky bit est défini.

Quantity -L FILE : Vrai si FILE existe et est un lien symbolique.

● -O FILE : Vrai si FILE existe et appartient à l'utilisateur exécutant la commande.

Quantity -p FILE : Vrai si FILE existe et est un tube.

Quantity -r FILE : Vrai si FILE existe et est lisible.

Quantity -S FILE : Vrai si FILE existe et est un socket.

Quantity -s FILE : Vrai si FILE existe et a une taille non nulle.

● -u FILE : True s'il existe et que les indicateurs set-user-id (suid) sont définis.

Quantity -w FILE : Vrai si FILE existe et est accessible en écriture.

Quantity -x FILE : Vrai si FILE existe et est exécutable.

Comment vérifier si un fichier existe ?

Lors de la vérification si un fichier existe, les opérateurs FILE les plus couramment utilisés sont -e et -f. Le premier opérateur vérifiera si le fichier existe quel que soit le type de fichier ; le deuxième opérateur ne retournera vrai que si le fichier est un fichier normal (pas un répertoire ou un périphérique).

Lors de la vérification si un fichier existe, l'option la plus lisible consiste à utiliser la commande test en conjonction avec une instruction if. L'un des extraits de code suivants vérifiera si le fichier /etc/resolv.conf existe :

FILE=/etc/resolv.conf
if test -f "$FILE"; then
    echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
fi
FILE=/etc/resolv.conf
if [[ -f "$FILE" ]]; then
    echo "$FILE exist"
fi

Si vous souhaitez effectuer différentes actions selon que le fichier existe, utilisez simplement une structure if/then :

FILE=/etc/resolv.conf
if [ -f "$FILE" ]; then
    echo "$FILE exist"
else 
    echo "$FILE does not exist"
fi

Remarque : Utilisez toujours des guillemets doubles pour éviter les problèmes lorsque vous travaillez avec des fichiers contenant des espaces dans leurs noms.

Vous pouvez également utiliser la commande test sans instruction if. La commande après l'opérateur && ne sera exécutée que si l'état de sortie de la commande de test est vrai,

test -f /etc/resolv.conf && echo "$FILE exist"
[ -f /etc/resolv.conf ] && echo "$FILE exist"
[[ -f /etc/resolv.conf ] && echo "$FILE exist"

Si vous souhaitez exécuter une série de commandes après l'opérateur &&, juste Placez simplement la commande entre accolades séparées par ";" ou "&&".

[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }

Contrairement à &, l'instruction qui suit l'opérateur || n'est exécutée que lorsque l'état de sortie de la commande test est faux.

[ -f /etc/resolv.conf ] && echo "$FILE exist" || echo "$FILE does not exist"

Comment vérifier si un répertoire existe ?

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

Par exemple, pour vérifier si le répertoire /etc/docker existe, vous utiliserez :

FILE=/etc/docker
if [ -d "$FILE" ]; then
    echo "$FILE is a directory"
fi
[ -d /etc/docker ] && echo "$FILE is a directory"

De même, vous pouvez également utiliser des doubles crochets [[ au lieu d'un simple parenthèse [.

Comment vérifier si un fichier n'existe pas ?

Comme dans de nombreuses autres langues, ça marche ! (point d'exclamation) Opérateur NON logique pour annuler l'expression de test :

FILE=/etc/docker
if [ ! -f "$FILE" ]; then
    echo "$FILE exist and it is a directory"
fi

Comme ci-dessus :

[ ! -f /etc/docker ] || echo "$FILE does not exist"

Comment vérifier si plusieurs fichiers existent ?

Si plusieurs fichiers existent, vous pouvez utiliser -a (ou &&with[]) pour tester au lieu d'utiliser des constructions if/else imbriquées complexes :

FILE=/etc/docker
if [ -f /etc/resolv.conf -a -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi
FILE=/etc/docker
if [ -f /etc/resolv.conf && -f /etc/hosts ]; then
    echo "$FILE is a directory"
fi

Variante équivalente sans instruction IF :

[ -f /etc/resolv.conf -a -f /etc/hosts ] && echo "both files exist"
[[ -f /etc/resolv.conf && -f /etc/hosts ]] && echo "both files exist"

Tutoriels vidéo associés recommandés : "Tutoriel Linux"

C'est tout. L'intégralité du contenu de cet article est j'espérais être utile à l'étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn