Soy un nuevo estudiante de bash scripting, y estoy perplejo en una tarea de asignación. Me preguntaba si existe una manera fácil de determinar si la entrada de un usuario es un número entero o no. Más específicamente, si se le pide a un usuario que ingrese un número entero, ¿hay una verificación rápida para validar?¿Hay alguna manera fácil de determinar si la entrada del usuario es un número entero en bash?
Respuesta
Este es una especie de kludge, está usando -eq para algo distinto de lo que se pretendía, pero busca un entero, si no encuentra un int devuelve un error que puede lanzar a/dev/null y un valor de falso.
read input
if [ $input -eq $input 2>/dev/null ]
then
echo "$input is an integer"
else
echo "$input is not an integer"
fi
Una forma es comprobar si contiene caracteres que no sean números. Reemplaza todos los dígitos con nada y verifica la longitud; si hay longitud, hay caracteres que no son dígitos.
if [[ -n ${input//[0-9]/} ]]; then
echo "Contains letters!"
fi
Otro enfoque es comprobar si la variable, evaluada en el contexto aritmético, es igual a sí misma. Esto es-fiesta específica
if [[ $((foo)) != $foo ]]; then
echo "Not just a number!"
fi
BASH FAQ entry #54
Esa pregunta frecuente se titula "¿Cómo puedo saber si una variable contiene un número válido?" - proporciona muchas formas posibles de identificar. –
me encontré con este post http://www.unix.com/shell-programming-scripting/21668-how-check-whether-string-number-not.html que habla de esto.
Si la entrada no es necesario para comprobar si hay un +/- en el número, entonces usted puede hacer:
expr $num + 1 2> /dev/null
if [ $? = 0 ]
then
echo "Val was numeric"
else
echo "Val was non-numeric"
fi
usted puede probar mediante el uso de expresiones regulares
if ! [[ "$yournumber" =~ ^[0-9]+$ ]] ;
then exec >&2; echo "error: Not a number"; exit 1
fi
Este es el más literal y, por lo tanto, el más fácil de recordar. –
Aquí hay otra forma de hacerlo. Probablemente sea un poco más elaborado de lo necesario en la mayoría de los casos, pero también manejaría los decimales. Escribí el siguiente código para obtener el número redondeado. También verifica la entrada numérica en el proceso.
#--- getRound -- Gives number rounded to nearest integer -----------------------
# usage: getRound <inputNumber>
#
# echos the rounded number
# Best to use it like:
# roundedNumber=`getRound $Number`
# check the return value ($?) and then process further
#
# Return Value:
# 2 - if <inputNumber> is not passed, or if more arguments are passed
# 3 - if <inputNumber> is not a positive number
# 0 - if <inputNumber> is successfully rounded
#
# Limitation: Cannot be used for negative numbers
#-------------------------------------------------------------------------------
getRound(){
if [ $# -ne 1 ]
then
exit 2
fi
#--- Check if input is a number
Input=$1
AB=`echo A${Input}B | tr -d [:digit:] | tr -d '.'`
if [ "${AB}" != "AB" ] #--- Allow only '.' and digit
then
exit 3
fi
DOTorNone=`echo ${Input} | tr -d [:digit:]` #--- Allow only one '.'
if [ "${DOTorNone}" != "" ] && [ "${DOTorNone}" != "." ]
then
exit 3
fi
echo $Input | awk '{print int($1+0.5)}' #--- Round to nearest integer
}
MyNumber=`getRound $1`
if [ $? -ne 0 ]
then
echo "Empty or invalid input passed"
else
echo "Rounded input: $MyNumber"
fi
- 1. VBScript: verificando si la entrada del usuario es un número entero
- 2. Determinar si un valor es un número entero en Python
- 3. ¿Hay alguna manera de verificar si una variable es un número entero? C++
- 4. ¿Determinar si el valor de JavaScript es un "número entero"?
- 5. Convertir la entrada del usuario al número entero
- 6. Bash: Probando si una variable es un número entero
- 7. ¿Cómo detectar si un número dado es un número entero?
- 8. Bash: comprobar que la entrada del usuario es correcta
- 9. ¿Hay alguna manera de determinar si un usuario está utilizando banda ancha o marcación
- 10. ¿Hay alguna forma de determinar si Java System.in es "interactivo"?
- 11. En un script bash, ¿cómo saneo la entrada del usuario?
- 12. ¿Cuál es una buena manera de verificar si un doble es un número entero en C#?
- 13. En .NET MVC, ¿hay alguna manera fácil de verificar si estoy en la página de inicio?
- 14. ¿Hay alguna manera de obtener la entrada del usuario sin presionar la tecla enter?
- 15. ¿Hay alguna manera de determinar el tamaño físico del monitor?
- 16. ¿cómo chequea() si la entrada es un número entero o un carácter?
- 17. Cómo determinar si una cadena es un número en C#
- 18. Determinar si un usuario es ideal en el IRC
- 19. Comprobando si una variable es un número entero en javascript
- 20. ¿La manera más fácil de determinar si la conexión a internet del iPhone está disponible?
- 21. ¿Cuál es una mejor manera de verificar si una cadena es un número entero en iPhone?
- 22. ¿Hay alguna manera fácil de borrar un formulario ASP.NET?
- 23. ¿Hay alguna manera de determinar si un paquete tiene estado en Oracle?
- 24. ¿Hay alguna manera de determinar si un menú desplegable de <select> está abierto?
- 25. ¿Hay alguna manera fácil de obtener ServerName en Symfony?
- 26. ¿Existe una manera fácil de convertir un valor booleano a un número entero?
- 27. ¿Cómo puedo determinar si una variante es un número entero en VBA?
- 28. ¿Hay alguna manera fácil de obtener datos de usuario de AuthComponent desde una vista en CakePHP?
- 29. ¿Hay alguna manera fácil de adjuntar una fuente en Eclipse?
- 30. La mejor manera de obligar a un usuario a ingresar un número entero en Matlab
Esto supone que/dev/null existe – Xofo
También asume que el argumento no está vacío –