elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Operaciones con archivos en Bash
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Operaciones con archivos en Bash  (Leído 13,449 veces)
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Operaciones con archivos en Bash
« en: 5 Agosto 2010, 15:58 pm »

¿Qué está mal en este código?
Código
  1. #!/usr/bin/env bash
  2. # Operaciones con archivos
  3. # Saber si es archivo, folder, vacio, ejecutable, de lectura...
  4.  
  5. echo "Dame el nombre de un archivo"
  6. read ENTRADA
  7.  
  8. if [ -s $ENTRADA ]; then
  9. echo "$ENTRADA es un archivo y no esta vacio"
  10. if [ -x $ENTRADA ]; then
  11. echo "$ENTRADA es ejecutable"
  12. fi
  13. if [ -r $ENTRADA ]; then
  14. echo "$ENTRADA es de lectura"
  15. fi
  16. if [ -w $ENTRADA ]; then
  17. echo "$ENTRADA es de escritura"
  18. fi
  19.  
  20. elif [ -f $ENTRADA ]; then
  21. echo "$ENTRADA es un archivo y no directorio, pero esta vacio"
  22. elif [ -d $ENTRADA ]; then
  23. echo "$ENTRADA es una carpeta"
  24. else
  25. echo "$ENTRADA no existe!"
  26. fi

Si pongo un archivo o carpeta, siempre me dirige al primer IF, como si fuera un archivo no vacío.  :huh:


En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Operaciones con archivos en Bash
« Respuesta #1 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
  1. if [ -s $ENTRADA ]; then
  2. echo "$ENTRADA es un archivo y no esta vacio"
  3. elif [ -x $ENTRADA ]; then
  4. echo "$ENTRADA es ejecutable"
  5. elif [ -r $ENTRADA ]; then
  6. echo "$ENTRADA es de lectura"
  7. elif [ -w $ENTRADA ]; then
  8. echo "$ENTRADA es de escritura"
  9. elif [ -f $ENTRADA ]; then
  10. echo "$ENTRADA es un archivo y no directorio, pero esta vacio"
  11. elif [ -d $ENTRADA ]; then
  12. echo "$ENTRADA es una carpeta"
  13. else
  14. echo "$ENTRADA no existe!"
  15. fi


« Última modificación: 5 Agosto 2010, 18:39 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: Operaciones con archivos en Bash
« Respuesta #2 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
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Operaciones con archivos en Bash
« Respuesta #3 en: 5 Agosto 2010, 21:27 pm »

Código
  1. #!/usr/bin/bash
  2. read -p "Archivo : " file
  3. if [ ! -z $file ]
  4. then
  5. if [ -f $file ]
  6. then
  7. echo -e "Archivo";
  8.  
  9. if [ -x $file ]
  10. then
  11. echo -e "Permisos ejecutable";
  12. fi
  13.  
  14. if [ -r $file ]
  15. then
  16. echo -e "Permisos lectura";
  17. fi
  18.  
  19. if [ -w $file ]
  20. then
  21. echo -e "Permisos Escritura";
  22. fi
  23.  
  24. else
  25. echo -e "Directorio";
  26. fi
  27. else
  28. echo -e "Entrada incorrecta.";
  29. fi
  30.  
  31.  

Código:
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
  1. #!/usr/bin/bash
  2. read -p "Entrada : " file
  3. [ ! -z "${file}" ] && (
  4.  
  5. [ -f "${file}" ] && (
  6. echo -e "Archivo";
  7.  
  8. [ -x "${file}" ] && (
  9. echo -e "Permiso ejecutable";
  10. )
  11.  
  12. [ -r "${file}" ] && (
  13. echo -e "Permiso lectura";
  14. )
  15.  
  16. [ -w "${file}" ] && (
  17. echo -e "Permiso escritura";
  18. )
  19. ) || (
  20. echo -e "Directorio";
  21. )
  22.  
  23. ) || (
  24. echo -e "Entrada incorrecta.";
  25. )
« Última modificación: 5 Agosto 2010, 21:38 pm por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: Operaciones con archivos en Bash
« Respuesta #4 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
  1. if [ ! -z $file ]
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Operaciones con archivos en Bash
« Respuesta #5 en: 5 Agosto 2010, 21:45 pm »

Comprueba que la cadena no esté vacía.

Código
  1. if [ ! -s $file ]
  2.    print "$file is empty"
  3. else
  4.    print "$file has content"
  5. fi
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: Operaciones con archivos en Bash
« Respuesta #6 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:
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Operaciones con archivos en Bash
« Respuesta #7 en: 5 Agosto 2010, 22:27 pm »

Crealo así:

Código:
: > file.txt

ó.

Código:
touch file.txt
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
JuszR


Desconectado Desconectado

Mensajes: 2.866


Programming & RI


Ver Perfil
Re: Operaciones con archivos en Bash
« Respuesta #8 en: 5 Agosto 2010, 22:34 pm »

Oh, gracias por todo. :D
En línea

- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Operaciones con archivos en Bash
« Respuesta #9 en: 5 Agosto 2010, 22:42 pm »

De nada.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BASH] FTP ver archivos
Scripting
Puntoinfinito 4 2,657 Último mensaje 4 Agosto 2012, 01:15 am
por overxfl0w13
ayuda con bash copiar archivos
Scripting
mcricar 3 3,398 Último mensaje 19 Febrero 2013, 10:15 am
por Eleкtro
Operaciones aritmeticas variables bash
Scripting
rusogumo 2 3,529 Último mensaje 12 Marzo 2015, 12:17 pm
por Eleкtro
Operaciones básica sobre archivos con acceso secuencial (búsqueda, inserción, el
Java
JackWithe 1 2,195 Último mensaje 2 Octubre 2020, 22:10 pm
por rub'n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines