web-dev-qa-db-fra.com

Différence entre if -e et if -f

J'ai une question simple, mais je n'ai trouvé aucune réponse. Il existe deux commutateurs pour la condition if qui vérifient la présence d'un fichier: -e et -f.

Quelle est la différence entre ces deux-là?

40
Ahatius

Voir: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

Je pense que ce ne sont pas des "si commutateurs", plutôt des "commutateurs de test" (car vous devez les utiliser entre crochets [].

Mais la différence est:

[ -e FILE ] True si FILE existe.

Cela retournera vrai pour les deux /etc/hosts et /dev/null.

[ -f FILE ] True si FILE existe et est un fichier normal. Cela retournera vrai pour /etc/hosts et faux pour /dev/null (car ce n'est pas un fichier normal).

67
Emil Vatai
$ man bash
       -e file
              True if file exists.
       -f file
              True if file exists and is a regular file.

Un fichier normal est quelque chose qui n'est pas un répertoire/symlink/socket/device, etc.

32
jman

-e vérifie tout type d'objet du système de fichiers; -fniquement recherche un fichier normal.

4

L'instruction if utilise en fait le programme "test" pour les tests. Vous pouvez écrire des instructions if de deux manières:

if [ -e filename ];

ou

if test -e filename;

Si vous le savez, vous pouvez facilement consulter la page de manuel pour "test" pour découvrir la signification des différents tests:

man test
3
gitaarik