Script de shell para verificar un valor de punto flotante válido

La entrada del usuario puede ser complicada de administrar, especialmente si se trata de números. Supongamos que desea realizar cálculos matemáticos en su aplicación o secuencia de comandos. No es difícil decir que tendrá que lidiar con números de coma flotante. Es fácil en muchos lenguajes de programación tipificados estáticamente, pero si tiene que funcionar en terminales, eso puede volverse bastante molesto ya que las secuencias de comandos de shell o bash no tienen ningún tipo de datos.

Tenemos que trabajar sin tipos de datos y hacer uso de las habilidades de programación para que realmente funcione. Con suerte, tenemos expresiones regulares en Bash para lidiar con tales problemas. Las expresiones regulares o RegEx, en resumen, es una expresión como su nombre indica que puede encontrar ciertos patrones en un campo de texto. Es una herramienta bastante poderosa para tener en el kit de herramientas de un programador. Entonces, veamos cómo resolver el problema.

Acercarse

Así que encontremos un enfoque modular para la declaración del problema. Necesitamos verificar si la variable de entrada es un número decimal (coma flotante) o no. Para hacer eso, debemos tener solo dígitos en la variable y solo un punto decimal. El punto decimal puede estar en cualquier lugar, pero tiene que ser solo uno. Para verificar si solo hay dígitos presentes, podemos usar Expresión regular y, además, también podemos verificar un punto decimal desde el segundo hasta el penúltimo carácter, ya que un punto decimal no puede estar al principio y al final. Simplemente podemos usar declaraciones condicionales para verificar estas condiciones necesarias. 

Explicación

En primer lugar, tomaremos la entrada del usuario y la almacenaremos en cualquier variable con nombre preferible. 

Estamos usando read para pedirle al usuario que ingrese. Junto con el comando «leer», usaremos -p como argumento para el comando base «leer» para un mensaje que muestra el texto, como ingresar el número o cualquier información relevante preferible.

Ahora debemos verificar que la entrada sea un número o no. Esto nos permite estar seguros de que la siguiente condición sea un valor de punto flotante; de ​​lo contrario, entrará en conflicto con los números y los números de punto flotante.

Expresión regular:

La expresión regular nos permite encontrar un patrón en el texto o una variable. Aquí estamos usando n como una variable de entrada. Usamos =~ para que bash sepa que la expresión que viene es un RegEx. Después de eso, usamos ^ y $para verificar el patrón de principio a fin.

Un número puede tener signos positivos o negativos, al igual que un valor flotante y, por lo tanto, se aplica a ambas condiciones. Cualquier cosa entre [ ] tiene que coincidir con la entrada, en este caso, incluimos 0-9 ya que cualquier número puede estar en la entrada. Hemos añadido un «?» después de los signos +- para que sean opcionales, es decir, no es obligatorio incluir + para indicar los números como positivos. Un signo * para repetir la expresión anterior cero o más veces para incluir además más dígitos. Después de identificar un número, usamos «+» para incluir las siguientes condiciones a las anteriores una o más veces. El “\” en la condición de coma flotante simplemente se comporta como un carácter ordinario. Finalmente añadimos “.’ en medio y «?» para fusionar las expresiones y hacer decimal opcional, pero no llamará a un número ya que la condición anterior ya está satisfecha. Por lo tanto, terminamos la expresión con el signo «$» e imprimimos la condición satisfecha de que la entrada sea un número entero, un valor de punto flotante o cualquier expresión.

Fragmento de código de script de shell

#!/bin/bash

# User Input
read -p "Enter the number : " n


# Check for a number
if [[ $n =~ ^[+-]?[0-9]+$ ]];then
echo "The Input is an integer."


# Check for a floating number
elif [[ $n =~ ^[+-]?[0-9]*\.?[0-9]+$ ]];then
echo "Input is a float "
else
echo "The input is not a number."
fi

Producción:

Shell Script to test whether a number is a valid floating-point value

Salida de ShellScript con muchos casos de prueba

Al hacer un Shell Script usando Regular Expression, verificamos que la entrada del usuario sea un número de punto flotante o no. El script no considera la notación científica como un valor de punto flotante que también se puede lograr, pero para mantenerlo simple para un uso simplista, funciona con precisión. 

Publicación traducida automáticamente

Artículo escrito por meetgor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *