Duda. Shell-Scripts: Enteros

Hola hoy me han mandado una practica que la tienes que aprobar para poder hacer el examen y no es muy dificil, pero hay una comprobacion que no se dio en clase y que no la encuentro por internet y es comprobar si un parametro es un entero. Se que comprobar dos enteros es con la opcion -eq (test num1 -eq num2) pero no veo en ningun lado como ver si $1 es un entero:(

A ver si alguien me dice cual es esa opcion ;)
Ya que hablamos de bash script. Te recomiendo un manual bastante bueno (al menos a mi me servio para las practicas que hize el año pasado)
Es este: http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/Bash-Prog-Intro-COMO.html

Salu2
Gracias Cafetino, pero no encuentro eso que busco que me devuelva TRUE si la variable contiene un entero, ya que si no se traga los caracteres y luego da error en las aplicaciones que necesitan un entero como parametro y yo quiero que ese error lo de mi guion de shell, pero no encuentro la herramienta o la opcion del test :(

Ferdy, me conozco ya los man :P pero no lo veo por ningun lado :( y tire de internet por si era mas facil encontrarlo, pero tampoco, y por eso ya pregunte aqui en el foro ;)

Gracias por la ayuda ;)
No sé a qué se referirá Ferdy, porque a mí no se me ocurre un modo directo...

Sí una chapucilla que consiste en comprobar si todos los caracteres de la variable son números:

$ [ -z "`echo $VARIABLE | tr -d '0-9'`" ]
Ferdy se referia que mirara las paginas de manual de mis versiones de bash y test para buscar eso, pero no hay manera de verlo jeje

Auxiliar gracias por la ayuda, cuando pueda lo pruebo. No sabia que la herramienta TR tambien comprobara caracteres y devolviera un boobleano.

Gracias!
Me refería a algo así como que bash es "untyped", así que hay pocas formas [ ¿ninguna? ] de comparar eso...

Teóricamente podrías hacerlo utilizando [[ y ]] ( o (( y )) ) pero las pruebas que he hecho fallan...

--(ferdy@posidon$ ferdy  )-- [[ "13" -eq 13 ]] && echo Success
Success
--(ferdy@posidon$ ferdy  )-- [[ "13" == 13 ]] && echo Success
Success
--(ferdy@posidon$ ferdy  )-- (( "13" == 13 )) && echo Success
Success


[[ y ]] -> Hacen comprobaciones de tipos [ ja.... ]
(( y )) -> Para cosas estrictamente con números [ realmente es por probar, porque en teoría tampoco debería funcionar :P ]

Me temo que lo que pides no es posible sin hacer 'chapucillas' como la que propone auxiliar.

PD: He probado a hacer lo mismo con BASH utilizando los reemplazos built-in y no lo he conseguido...

---------------------

En Advanced Bash-Scripting Guide proponen

SUCCESS=0
FAILURE=-1

isdigit ()    # Tests whether *entire string* is numerical.
{             # In other words, tests for integer variable.
  [ $# -eq 1 ] || return $FAILURE

  case $1 in
  *[!0-9]*|"") return $FAILURE;;
            *) return $SUCCESS;;
  esac
}


-----------------------

Esto parece hacerlo:

SANITIZADA=${VARIABLE//[!0-9]/}


Lo había intentado antes con regexp de sed y claro no me rulaba :P al ver el ejemplo del manual, me ha venido otra vez la inspiracion jaja.

Salu2.Ferdy
Escapology escribió:Auxiliar gracias por la ayuda, cuando pueda lo pruebo. No sabia que la herramienta TR tambien comprobara caracteres y devolviera un boobleano.


No, no lo hace...

man tr


;-)

De todos modos, es mejor hacer lo que propone Ferdy: te ahorras programas externos:

$ [ -z ${VARIABLE//[0-9]/} ]
Muchisimas gracias Ferdy y auxiliar. Os debo una ;)
8 respuestas