Si le fichier existe et n’est pas vide. Me donne toujours la fausse valeur

J’ai un script bash:

echo " enter file name " read $file if [ -f "$file" ] && [ -s "$file" ] then echo " file does not exist, or is empty " else echo " file exists and is not empty " fi 

Peu importe ce que j’entre dans un $file , cela me donne une fausse valeur. Je peux même entrer un fichier qui n’existe même pas, ça me donnera toujours la fausse valeur. Pourquoi est-ce les gars? Merci d’avance

Il suffit de vérifier pour -s , car il est dit:

FILE existe et a une taille supérieure à zéro

http://unixhelp.ed.ac.uk/CGI/man-cgi?test

votre sortie est également commutée, donc elle does not exists quand un fichier existe, car -s donnera TRUE si le fichier existe ET a une size > 0 .

Donc, vous devez utiliser correctement:

 echo " enter file name " read file if [ -s "$file" ] then echo " file exists and is not empty " else echo " file does not exist, or is empty " fi 

Cela vous donnera le résultat attendu.

Aussi il devrait être

 read file 

au lieu de

 read $file 

Si vous souhaitez plus d’informations, je vous recommande de lire le man test man read et de le man read

Veuillez noter que [ -f "$file" ] && [ -s "$file" ] renverra true si le fichier existe et n’est pas vide.

Autre option:

 if [[ -f "/path/to/file" && -s "/path/to/file" ]]; then echo "exist and not empty" else echo "not exist or empty"; fi