¿Qué está mal en este código?
#!/usr/bin/env bash
# Operaciones con archivos
# Saber si es archivo, folder, vacio, ejecutable, de lectura...
echo "Dame el nombre de un archivo"
read ENTRADA
if [ -s $ENTRADA ]; then
echo "$ENTRADA es un archivo y no esta vacio"
if [ -x $ENTRADA ]; then
echo "$ENTRADA es ejecutable"
fi
if [ -r $ENTRADA ]; then
echo "$ENTRADA es de lectura"
fi
if [ -w $ENTRADA ]; then
echo "$ENTRADA es de escritura"
fi
elif [ -f $ENTRADA ]; then
echo "$ENTRADA es un archivo y no directorio, pero esta vacio"
elif [ -d $ENTRADA ]; then
echo "$ENTRADA es una carpeta"
else
echo "$ENTRADA no existe!"
fi
Si pongo un archivo o carpeta, siempre me dirige al primer IF, como si fuera un archivo no vacío. :huh:
El error está en que los if's están dentro del primer if's, están anidados.
Sácalos de ahí y ponlos con elif.
if [ -s $ENTRADA ]; then
echo "$ENTRADA es un archivo y no esta vacio"
elif [ -x $ENTRADA ]; then
echo "$ENTRADA es ejecutable"
elif [ -r $ENTRADA ]; then
echo "$ENTRADA es de lectura"
elif [ -w $ENTRADA ]; then
echo "$ENTRADA es de escritura"
elif [ -f $ENTRADA ]; then
echo "$ENTRADA es un archivo y no directorio, pero esta vacio"
elif [ -d $ENTRADA ]; then
echo "$ENTRADA es una carpeta"
else
echo "$ENTRADA no existe!"
fi
Pero si quiero imprimir también -x, -w y -r cuando es archivo no puedo.
Al parecer, la shell toma carpetas también como archivos. ;D
#!/usr/bin/bash
read -p "Archivo : " file
if [ ! -z $file ]
then
if [ -f $file ]
then
echo -e "Archivo";
if [ -x $file ]
then
echo -e "Permisos ejecutable";
fi
if [ -r $file ]
then
echo -e "Permisos lectura";
fi
if [ -w $file ]
then
echo -e "Permisos Escritura";
fi
else
echo -e "Directorio";
fi
else
echo -e "Entrada incorrecta.";
fi
leo@lein:~/Escritorio$ bash shell.sh
Archivo : /
Directorio
leo@lein:~/Escritorio$ bash shell.sh
Archivo : ./pl.pl
Archivo
Permisos ejecutable
Permisos lectura
Permisos Escritura
leo@lein:~/Escritorio$ bash shell.sh
Archivo : ~
Directorio
leo@lein:~/Escritorio$ bash shell.sh
Archivo : $HOME
Directorio
leo@lein:~/Escritorio$ bash shell.sh
Archivo : ./vocabulario.txt
Archivo
Permisos lectura
Permisos Escritura
leo@lein:~/Escritorio$
#!/usr/bin/bash
read -p "Entrada : " file
[ ! -z "${file}" ] && (
[ -f "${file}" ] && (
echo -e "Archivo";
[ -x "${file}" ] && (
echo -e "Permiso ejecutable";
)
[ -r "${file}" ] && (
echo -e "Permiso lectura";
)
[ -w "${file}" ] && (
echo -e "Permiso escritura";
)
) || (
echo -e "Directorio";
)
) || (
echo -e "Entrada incorrecta.";
)
Muy bueno!
Ahora solo unas preguntas: Porqué no usaste -s? O cómo podría saber si es archivo y está vacío?
Y ésta línea qué hace?
if [ ! -z $file ]
Comprueba que la cadena no esté vacía.
if [ ! -s $file ]
print "$file is empty"
else
print "$file has content"
fi
Ok, solo una cosa más... Hice un archivo (echo "" > a) y aparece como si no estuviera vacío. :huh:
Crealo así:
: > file.txt
ó.
touch file.txt
Oh, gracias por todo. :D
De nada.