Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: JuszR en 5 Agosto 2010, 15:58 PM

Título: Operaciones con archivos en Bash
Publicado por: JuszR en 5 Agosto 2010, 15:58 PM
¿Qué está mal en este código?
Código (bash) [Seleccionar]
#!/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.

Código (bash) [Seleccionar]
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
Código (bash) [Seleccionar]
#!/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$


Código (bash) [Seleccionar]
#!/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?
Código (bash) [Seleccionar]

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.

Código (bash) [Seleccionar]
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
Crealo así:

: > file.txt

ó.

touch file.txt
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.