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 en tant que $file
, ça me donne la fausse valeur. Je peux même entrer dans un fichier qui n'existe même pas, il me donnera toujours la valeur fausse. Pourquoi est-ce les gars? Merci d'avance
Il suffit de vérifier -s
, Car il dit:
FILE existe et a une taille supérieure à zéro
http://unixhelp.ed.ac.uk/CGI/man-cgi?test
de plus, votre sortie est commutée, donc elle génère does not exists
lorsqu'un fichier existe, car -s
donnera TRUE
si le fichier existe ET a un size > 0
.
Si correctement, vous devriez utiliser:
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.
En outre, il devrait être
read file
au lieu de
read $file
Si vous souhaitez plus d’informations, je vous recommande de lire man test
et man read
Veuillez noter que [ -f "$file" ] && [ -s "$file" ]
retournera 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