Título: Operaciones con archivos en Bash
Publicado por: JuszR en 5 Agosto 2010, 15:58 pm
¿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:
Título: Re: Operaciones con archivos en Bash
Publicado por: leogtz en 5 Agosto 2010, 18:36 pm
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
Título: Re: Operaciones con archivos en Bash
Publicado por: JuszR en 5 Agosto 2010, 20:24 pm
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
Título: Re: Operaciones con archivos en Bash
Publicado por: leogtz en 5 Agosto 2010, 21:27 pm
#!/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."; )
Título: Re: Operaciones con archivos en Bash
Publicado por: JuszR en 5 Agosto 2010, 21:42 pm
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 ]
Título: Re: Operaciones con archivos en Bash
Publicado por: leogtz en 5 Agosto 2010, 21:45 pm
Comprueba que la cadena no esté vacía. if [ ! -s $file ] print "$file is empty" else print "$file has content" fi
Título: Re: Operaciones con archivos en Bash
Publicado por: JuszR en 5 Agosto 2010, 22:22 pm
Ok, solo una cosa más... Hice un archivo (echo "" > a) y aparece como si no estuviera vacío. :huh:
Título: Re: Operaciones con archivos en Bash
Publicado por: leogtz en 5 Agosto 2010, 22:27 pm
Título: Re: Operaciones con archivos en Bash
Publicado por: JuszR en 5 Agosto 2010, 22:34 pm
Oh, gracias por todo. :D
Título: Re: Operaciones con archivos en Bash
Publicado por: leogtz en 5 Agosto 2010, 22:42 pm
De nada.
|