Permite espacio antes y después del número, _33, o 33___, pero no 3__3. y sin letras 0 o
- Obtener el aporte de usuario hasta que correcta
# -- get input until Correct
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
echo "Please enter in a number:"
read get_num
done
echo This is a number : ${get_num}
- Obtener entrada hasta que correcta (dentro del rango)
# -- get input until Correct (within range)
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
echo "Please enter in a number within range of (1-30):"
read get_num
! [[ ${get_num} -ge 1 && ${get_num} -le 30 ]] && unset get_num
done
echo This is a number withn a range : ${get_num}
- obtener de entrada hasta que correcta (dentro del rango) (modo regex completo)
"Dado que las expresiones regulares se refieren al texto en lugar de a los números, la coincidencia de un número en un rango dado requiere un poco de cuidado adicional. No se puede simplemente escribir [0-255 ] para que coincida con un número entre 0 y 255. Aunque es una expresión regular válida, coincide con algo completamente diferente. [0-255] es una clase de personaje con tres elementos: el rango de caracteres 0-2, el personaje 5 y el personaje 5 (nuevamente). Esta clase de caracteres coincide con un solo dígito 0, 1, 2 ó 5, al igual que [0125] "~ http://www.regular-expressions.info/numericranges.html
# -- get input until Correct (within range) (another way)
unset get_num
while [[ ! ${get_num} =~ ^([1-9]|1[0-9]|2[0-9]|30)$ ]]; do
echo "Please enter in a number within range of (1-30):"
read get_num
done
echo This is a number withn a range : ${get_num}
-. Obtener el aporte, y comprobar que sólo (sin bucle while)
# -- get input, and check it only (no while loop)
unset get_num
echo "Please enter in a number:"
read get_num
if [[ ! ${get_num} =~ ^[0-9]+$ ]] ;then
echo "${get_num} isn't a number"
else
echo "${get_num} is a number"
fi
Sí que funciona, gracias, pero estoy reutilizando la misma variable así que la próxima vez tiene un valor de la última entrada. ¿Alguna idea? –
No entiendo muy bien a qué te refieres. Es por eso que lo configuramos a una cadena vacía antes de ingresar al ciclo :) –
La solución anterior aún acepta entradas como '22aa','aa 22 'o' a23bb '. La expresión regular debe incluir el inicio y d el final de la cadena: while [[! ($ number = ~^[0-9] + $)]]; do –