Foros del Web » Administración de Sistemas » Unix / Linux »

Pequeña duda en un script de bash

Estas en el tema de Pequeña duda en un script de bash en el foro de Unix / Linux en Foros del Web. Hola, quería un if que me mirara si el número de argumentos es igual a 3 ó 4, yo tengo esto pero parece que no ...
  #1 (permalink)  
Antiguo 18/12/2010, 05:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 52
Antigüedad: 13 años, 11 meses
Puntos: 5
Pregunta Pequeña duda en un script de bash

Hola, quería un if que me mirara si el número de argumentos es igual a 3 ó 4, yo tengo esto pero parece que no me funciona:
Código:
if [ ($#="3")||($#="4") ]; then
          ...
fi
  #2 (permalink)  
Antiguo 18/12/2010, 06:02
 
Fecha de Ingreso: mayo-2010
Mensajes: 37
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Pequeña duda en un script de bash

Código:
if [ $# = 3 ] || [ $# = 4 ]; then
    ...
fi
  #3 (permalink)  
Antiguo 18/12/2010, 14:30
 
Fecha de Ingreso: diciembre-2010
Mensajes: 52
Antigüedad: 13 años, 11 meses
Puntos: 5
Respuesta: Pequeña duda en un script de bash

Gracias, y como hago para saber si un número metido por argumento se encuentra en un intervalo, en este caso un argumento entre el intervalo 1 y 1000 es válido:

Código:
if [ $[$1<1]||$[$1>1000] ] ; then
    ...
else
    ...
fi
¿Sabéis?

Última edición por lomasdelicioso; 20/12/2010 a las 07:47
  #4 (permalink)  
Antiguo 20/12/2010, 14:02
 
Fecha de Ingreso: diciembre-2010
Mensajes: 1
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Pequeña duda en un script de bash

Prueba con :
Código:
if [ $[$1<1] ] || [ $[$1>1000]  ] ; then
    ...
else
    ...
fi
  #5 (permalink)  
Antiguo 20/12/2010, 14:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 52
Antigüedad: 13 años, 11 meses
Puntos: 5
Respuesta: Pequeña duda en un script de bash

Eso no funciona Superpriapo, es que el if no entiende de 1 y 0 sino de true o false, entonces eso siempre va a entrar en el if, no śe todavía como solucionarlo, quiero traducir de alguna manera el 1 y el 0, creo que ese es el problema.
Es que sabes que pasa, la condicion de un if es realmente una lista de declaraciones y no una expresion booleana, y no lo entiendo mucho, por eso sigo esperando a que alguien se le ocurra algo.
Gracias.
  #6 (permalink)  
Antiguo 21/12/2010, 11:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Pequeña duda en un script de bash

Hola !!

de todas formas, yo diría que matemáticamente hablando estáis teniendo en cuenta los intervalos abiertos ( -inf , 1 )u(1000 , +inf ). Intervalos que no deseáis usar. Vosotros queréis el intervalo abierto ( 1 , 1000).

Prueba con el siguiente código:

Código BASH:
Ver original
  1. #!/bin/bash
  2.  
  3. A=1
  4. B=1000
  5. P=50
  6.  
  7. if [ $A -lt $P ] && [ $P -lt $B ]; then
  8.     echo "ok"
  9. else
  10.     echo "no"
  11. fi
  12.  
  13. exit

el caso es que las comparaciones numéricas no se realizan con los operadores a los que estamos acostumbrados ( <, >, ==, != ). Éstos se usan para comparar cadenas.

Para comparar números se usan "-lt", "-le", "-eq", "-ge", "-gt", "-ne". Son parecidos a las instrucciones de comparación del lenguaje ensamblador.

Un saludo,
gonzo13
  #7 (permalink)  
Antiguo 22/12/2010, 17:51
 
Fecha de Ingreso: diciembre-2010
Mensajes: 52
Antigüedad: 13 años, 11 meses
Puntos: 5
De acuerdo Respuesta: Pequeña duda en un script de bash

Gracias Gonzo, justo lo que necesitaba, ya lo acomodé a como yo quiero por si les interesa:

Código:
#! /bin/bash
.
.
.
if [ 1 -le $1 ] && [ $1 -le 1000 ]; then

    #Mi programa...

else

    #La salida por pantalla del error...

fi
.
.
.
  #8 (permalink)  
Antiguo 23/12/2010, 09:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Pequeña duda en un script de bash

Encantado de ayudar lomasdelicioso. Sólo aconsejarte que uses variables para el 1 y el 1000 en lugar de escribir los valores directamente ya que en el caso de que tengas que hacer cambios, es más fácil cambiar el 1000 en un sitio que en varios. Puedes usar los nombres MINIMO y MAXIMO por ejemplo. Yo creo que es una buena idea.

Un saludo,
gonzo13
  #9 (permalink)  
Antiguo 23/12/2010, 12:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 52
Antigüedad: 13 años, 11 meses
Puntos: 5
De acuerdo Respuesta: Pequeña duda en un script de bash

Tiene razón, me convence tu argumento, gracias de nuevo:

Código:
#! /bin/bash

$MAX=1000
$MIN=1
.
.
.
if [ $MIN -le $1 ] && [ $1 -le $MAX ]; then

    #Mi programa...

else

    #La salida por pantalla del error...

fi
.
.
.
  #10 (permalink)  
Antiguo 24/12/2010, 09:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Pequeña duda en un script de bash

Hola de nuevo.

En realidad, el código debería ser el siguiente:

Código BASH:
Ver original
  1. #! /bin/bash
  2.  
  3. MAX=1000
  4. MIN=1
  5.  
  6. ...
  7.  
  8. if [ $MIN -le $1 ] && [ $1 -le $MAX ]; then
  9.  
  10.     # Tu programa...
  11.  
  12. else
  13.  
  14.     # La salida por pantalla del error...
  15.  
  16. fi
  17.  
  18. ...

Las variables 'MIN' y 'MAX' no necesitan ser declaradas con el símbolo '$'.

Un saludo,
gonzo13
  #11 (permalink)  
Antiguo 24/12/2010, 11:50
 
Fecha de Ingreso: diciembre-2010
Mensajes: 52
Antigüedad: 13 años, 11 meses
Puntos: 5
De acuerdo Respuesta: Pequeña duda en un script de bash

¡Ups! Es cierto, que fallo. Gracias de nuevo Gonzo.
  #12 (permalink)  
Antiguo 24/12/2010, 12:35
 
Fecha de Ingreso: agosto-2008
Mensajes: 240
Antigüedad: 16 años, 2 meses
Puntos: 6
Respuesta: Pequeña duda en un script de bash

No hay de que. Mucha suerte con tu código y ya sabes, a postear las dudas.

Un saludo,
gonzo13

Etiquetas: bash, pequeña
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:56.