🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
3 messages
3 total messages Started by Olaf "El BLanco" Thu, 15 Dec 2005 10:49
BASH
#1424
Author: Olaf "El BLanco"
Date: Thu, 15 Dec 2005 10:49
36 lines
1890 bytes
Mi idea es que en todos los comandos que haga primero verificar si los
parametros, en el caso de que sean archivos existen, tambien deberia
verificar si se ha ingresado el nro correcto de parametros.


andres@linux:~/scripts> cat allper
#!/bin/bash
if [ ls $1 2>/dev/null ] ; then
   echo -e "El archivo o directorio NO existe \n"
fi

Mi razonamiento:

Si la salida de error produjo algo (obviamente un mensaje de error),
aunque no lo vea en la salida estándar la condición del if tiene que ser
verdadera (cero) [[[porque es verdadera si y solo si se "produce algo"
verdad?]] y si es verdadera que me diga que no existe. 

Otro ejemplo:

#!/bin/bash
ls $1 2>/dev/null 1>&2

Hago un ls para ver si el archivo existe.
Me fijo en que quedo la variable $?

if [ $? ] ; then
    echo existe
else
    echo no existe

Estoy con la basico. No quiero adentrarme (todavia) en profundidad, pero me
gustaria saber si algo existe o no.

Saludos
Re: BASH
#1425
Author: Oscar Garcia
Date: Thu, 15 Dec 2005 12:14
82 lines
3248 bytes
El Thu, 15 Dec 2005 11:49:42 +0100, "Olaf \"El BLanco\""
<winter@yahoo.co.uk> escribi�:
>Mi idea es que en todos los comandos que haga primero verificar si los
>parametros, en el caso de que sean archivos existen, tambien deberia
>verificar si se ha ingresado el nro correcto de parametros.

Si miras en el manual de bash ver�s:
# Expands to the number of positional parameters in decimal.

Es decir, con $# tienes el n�mero de par�metros que se han pasado a tu
script.

>andres@linux:~/scripts> cat allper
>#!/bin/bash
>if [ ls $1 2>/dev/null ] ; then
>   echo -e "El archivo o directorio NO existe \n"
>fi

Puf... �No ser�a mejor usar...?
-d file
  True if file exists and is a directory.
-f file
  True if file exists and is a regular file.
-e file
  True if file exists.

Es decir, te bastar�a con un simple:

if [ -e $1 ]...

>Mi razonamiento:
>Si la salida de error produjo algo (obviamente un mensaje de error),
>aunque no lo vea en la salida est�ndar la condici�n del if tiene que ser
>verdadera (cero) [[[porque es verdadera si y solo si se "produce algo"
>verdad?]] y si es verdadera que me diga que no existe. 

Mi razonamiento, a�n no te has leido el manual de bash, �verdad?.

>Otro ejemplo:
>#!/bin/bash
>ls $1 2>/dev/null 1>&2
>
>Hago un ls para ver si el archivo existe.
>Me fijo en que quedo la variable $?
>
>if [ $? ] ; then
>    echo existe
>else
>    echo no existe

Hombre, quiz� querr�as decir:

if [ "$?" != "0" ] ...

O bien

if [ $? -ne 0 ] ...

Del manual:
arg1 OP arg2
  OP  is  one  of  -eq, -ne, -lt, -le, -gt, or -ge.  These arithmetic
binary operators return true if arg1 is equal to, not equal to, less
than, less than or equal to, greater than, or greater than  or equal
to arg2, respectively.  Arg1 and arg2 may be positive or negative
integers.

Y...
string1 != string2
  True if the strings are not equal.

>Estoy con la basico. No quiero adentrarme (todavia) en profundidad, pero me
>gustaria saber si algo existe o no.

Nada, seguro que si miraras el manual de las cosas un poco m�s amenudo
encontrar�as las respuestas a todo lo que buscas :)

Un saludo.

-- 
�scar Javier Garc�a Baudet
LinaresDigital
http://redstar.linaresdigital.com/
Re: BASH
#1426
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Thu, 15 Dec 2005 14:06
53 lines
3013 bytes
Hola "Olaf \"El BLanco\"" <winter@yahoo.co.uk>
el Thu, 15 Dec 2005 11:49:42 +0100 escribiste:

> 
> Mi idea es que en todos los comandos que haga primero verificar si los
> parametros, en el caso de que sean archivos existen, tambien deberia
> verificar si se ha ingresado el nro correcto de parametros.

Idea totalitaria difícil de sacarse de encima, ésta de querer
controlarlo todo. Así en general yo te diría:

- primero asegúrate de que el programa funciona correctamente cuando se
  le pasan los parámetros correctos. O sea, que lo que el programa ha de
  hacer, lo haga bien.
- comprueba sólo aquellas situaciones que, en caso de producirse, 
  provocarían un error *muy grave* de funcionamiento (agujeros de seguridad,
  cuelgues, corrupción de datos). Aquí no se trata de defender al
  usuario de sí mismo, sino de defender al programa del usuario.
- para el resto de casos (defender al usuario de sí mismo) cuanto más
  abierto lo dejes mejor.

La calidad de un programa se mide por el número de líneas que no
contiene :-)

> #!/bin/bash
> if [ ls $1 2>/dev/null ] ; then
>    echo -e "El archivo o directorio NO existe \n"
> fi

Ese error YA lo producen las funciones de la librería C cuando hace
falta. Además, lo hacen en el idioma que el usuario haya seleccionado.
Además, lo emiten por stderr, que es donde esperaría encontrarlo
cualquier usuario.

Prueba esto y decide tú mismo:

ls $1 || exit

O mejor aún, mete un "set -e" al principio del script (bash). Más info
en "help set".

> Estoy con la basico. No quiero adentrarme (todavia) en profundidad, pero me
> gustaria saber si algo existe o no.

Mírate las CONDITIONAL EXPRESSIONS del manual de bash:

man bash<return>/^CON<return>

-- 
Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es>
PGP key 2861C704 --- F206 5671 6789 425D 111C  1302 214F 1934 2861 C704
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads