Números decimales en Bash: operaciones en shell scripts

Como lo adelantamos en el post anterior, no es posible (de manera nativa) realizar operaciones con números decimales en Bash. En esta oportunidad explicaremos cómo superar esta limitación utilizando una herramienta llamada bc. Luego, modificaremos el script del post anterior para aceptar números decimales como entrada.

Cálculos con bc: usando números decimales en Bash

En realidad, bc es un lenguaje propiamente dicho. Su man page explica en detalle la gran variedad de opciones que acepta. Por una cuestión de brevedad, en este post nos concentraremos en la expresión scale. La misma nos permitirá especificar la cantidad de dígitos decimales que deseamos tener en el resultado de nuestros cálculos.

A continuación presentamos el mismo script del post anterior modificado para su uso con bc. En el mismo hemos indicado que deseamos que el resultado incluya 2 dígitos decimales solamente. ¿Pueden identificar las diferencias con respecto a la versión anterior del script?

#!/bin/bash

# Cantidad de números pasados como argumentos
CANT_ARGUMENTOS=$#

# Separador de argumentos
IFS='+'

# Reunimos todos los argumentos incluyendo el separador
SUMA=$(echo "$(( $* ))")

# Calculamos el promedio
PROMEDIO=$(echo "scale=2; $SUMA/$CANT_ARGUMENTOS" | bc)

#Mostramos el mensaje por pantalla
echo "El promedio de los números ingresados es $PROMEDIO"
  • Para empezar, la primera diferencia que introdujimos en este caso es la variable especial IFS. En Bash, el IFS (Input File Separator) nos permite especificar un separador de campos luego de que la expresión $* se expanda (incluyendo la lista completa de argumentos).
  • Posteriormente, la expresión scale nos permite especificar el número de dígitos decimales a incluir en el resultado de la división entre los valores contenidos en las variables SUMA y CANT_ARGUMENTOS.
  • Finalmente, eliminamos el mensaje con respecto al resto de la división del mensaje final. La razón es simple: al poder obtener el resultado como número decimal no nos interesa en este caso conocer el resto.

En la Fig. 1 podemos ver el resultado de la ejecución del script:

Números decimales en Bash: uso de bc
Figura 1 – Números decimales en Bash: uso de bc

¡Hasta la próxima!