linux - usuario - Si el archivo existe y no está vacío. Siempre me da el valor falso.
dar permisos a un usuario en linux (2)
Tengo un guión de 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
No importa lo que ingrese como un $file , me da el valor falso. Incluso puedo ingresar un archivo que ni siquiera existe. Todavía me dará el valor falso. ¿Por qué es eso chicos? Gracias por adelantado
Basta comprobar si hay -s , porque dice:
ARCHIVO existe y tiene un tamaño mayor a cero.
http://unixhelp.ed.ac.uk/CGI/man-cgi?test
también se cambia su salida, por lo que la salida does not exists cuando does not exists un archivo, porque -s dará TRUE si el archivo existe Y tiene un size > 0 .
Así que correctamente debes usar:
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
Esto le dará la salida esperada.
También debería ser
read file
en lugar de
read $file
Si quieres más información, te recomiendo leer el http://unixhelp.ed.ac.uk/CGI/man-cgi?test man read y el de man read
Tenga en cuenta que [ -f "$file" ] && [ -s "$file" ] devolverá true si el archivo existe y no está vacío.
Otra opción:
if [[ -f "/path/to/file" && -s "/path/to/file" ]]; then
echo "exist and not empty"
else
echo "not exist or empty";
fi