![¿Qué pasa con mi secuencia de comandos de verificación de archivos?](https://rvso.com/image/76407/%C2%BFQu%C3%A9%20pasa%20con%20mi%20secuencia%20de%20comandos%20de%20verificaci%C3%B3n%20de%20archivos%3F.png)
No entiendo por qué la última parte de mi script no muestra nada cuando no se encuentra ningún archivo o directorio.
echo -n "Please enter a filename or directory: "
read filename
if [ -z "$filename" ]; then
echo "You did not enter anything!"
exit 1
fi
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "You did not enter a valid file or directory."
fi
fi
exit
No sé qué le pasa a mi código. No mostrará el eco si se ingresa un archivo o directorio no válido o inexistente.
Respuesta1
Volví a formatear su guión para sangrar las if
declaraciones. Al hacerlo, quedó más claro que lo último echo
solo ocurre si -f
es verdadero y -d
falso. Si el usuario ingresa un archivo o directorio que no existe, -f
falla.
Considere esta revisión de su última sección:
if [ -e "$filename" ]; then
if [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
fi
else
echo "You did not enter a valid file or directory."
fi
Donde la sección verdadera de la primera if
declaración termina antes (por else
); entonces los archivos/directorios que no existen tienen una sección de código para ejecutar.
Respuesta2
Hay muchos otros tipos de archivos que no generarán ningún resultado en este código. Estos incluyen enlaces simbólicos, canalizaciones con nombre, sockets y archivos especiales de bloques y caracteres. En particular, /dev/tty
, /dev/stdin
y /dev/stdout
fracasan /dev/stderr
sin ser detectados por el código.
Puede modificar la lógica para tener en cuenta esto; sin embargo, esta estructura (estructura de estilo de declaración de caso) es más fácil de leer y menos propensa a errores:
if [ ! -e "$filename" ]; then
echo "$filename does not exist"
exit 1
elif [ -f "$filename" ]; then
echo "You entered a file."
elif [ -d "$filename" ]; then
echo "You entered a directory."
else
echo "$filename is not a regular file or directory."
exit 2
fi