Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cómo se puede comprobar en un script de Bash si el contenido de una variable es un número?

30 de abril de 2009

En uno de mis scripts tengo que comprobar si el argumento que se le pasa es un número o no. Necesitaría algo así, pero no se cómo hacerlo:

test *es_numero* $1 && VAR=$1 || echo "Por favor, introduce un número"

¿Alguien me puede echar una mano?


Estás leyendo una traducción autorizada de la pregunta How do I test if a variable is a number in bash? planteada por Flávio Amieiro en StackOverflow.


Respuestas

#1

Una posible solución sería utilizar una expresión regular como la siguiente:

es_numero='^-?[0-9]+([.][0-9]+)?$'
if ! [[ $argumento =~ $es_numero ]] ; then
   echo "ERROR: No es un número" >&2; exit 1
fi

Esta expresión regular tiene en cuenta los números enteros, los decimales y los números negativos. Si necesitas una comprobación más simple, puedes utilizar las siguientes expresiones regulares alternativas:

  • ^[0-9]+$, números enteros positivos.
  • ^[0-9]+([.][0-9]+)?$, números enteros o decimales positivos.

@librosweb

4 octubre 2014, 21:53