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
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