Comando expr y calc : Resuelve expresiones matemáticas en la terminal

Soy de los que siempre están programando scripts bash para resolver situaciones del día a día (crackear el password del AP/Router, automatizar procesos, etc).

En determinadas ocasiones me he visto en la necesidad de asignarle el valor de alguna expresión matemática a una variable, o simplemente trabajar con expresiones matemáticas, ahí me encuentro con el problema de que bash y las expresiones matemáticas, los cálculos no son muy amigos. Sucede que bash no es como python, que podemos decir variable = 1+5/6 (por ejemplo), en Bash deberemos usar el comando expr o calc

Comando expr

O sea, el comando expr nos sirve para resolver expresiones matemáticas en la terminal, con él podemos calcular lo que necesitemos. Por ejemplo, si queremos que nos aparezca el resultado de 1 + 2 * 8 / 3 ponemos en la terminal:

expr 1 + 2 \* 8 / 3

Noten que antes del asterisco * pongo el backslash -» \ … es necesario, pues expr no interpreta el asterisco como símbolo de multiplicación a no ser que se le ponga el \

Y en pantalla nos aparecerá el resultado. Aquí les dejo un screenshot con algunos ejemplos:

screenshot_expr1

Como pueden apreciar en los cálculos finales (14/4 y 13/4), 14 dividido entre 4 en realidad es 3.5 y 13 dividido entre 4 en realidad es 3.25, entonces ¿cómo es posible que nos muestre 3 en ambos casos? Lo que sucede es que el comando expr no nos muestra los decimales, o sea, lo que sigue después de la coma , no lo muestra, solo nos muestra el entero.

En caso de que queramos asignarle a una variable el resultado de una expresión matemática (Ej: 10/2), sería así:

variable=`expr 10 / 2`

Luego lo comprobamos con:

echo $variable

Es importante que exista un espacio entre cada caracter, o sea, un espacio entre cada número, cada símbolo de suma, resta, multiplicación o división

Comando calc

Este a diferencia del anterior sí es exacto en cuanto a los decimales, ejemplo:

calc 15 / 4

Nos mostraría: 3.75

Aquí les dejo un screenshot con varios ejemplos:

screenshot_calc

A diferencia de expr, cuando usamos calc es mejor que NO exista un espacio entre cada caracter, o sea, que no hayan espacios entre números y símbolos, justo como ven en la imagen anterior. Así como tampoco necesitan anteponer un \ antes del *

Bueno, esto es básicamente lo que quería comentarles.

No obstante, aún hay algunos otros tips interesantes de cada comando (especialmente de calc), les recomiendo que sea lean el manual:

man calc

man expr

Saludos


El contenido del artículo se adhiere a nuestros principios de ética editorial. Para notificar un error pincha aquí.

11 comentarios, deja el tuyo

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Muy útil, aunque definitivamente no sería bueno usar Bash para cálculos matemáticos, los decimales cuentan 😀

    1.    Wada dijo

      Sr. elav aun tenemos bash calculator 🙂 podemos utilizar el argumento -l para que utilice la libreria standard math
      algo así

      $ echo "(4/8)+(6/9)" | bc -l
      1.166666666666666666666666

      ha

      1.    elav dijo

        😀

      2.    eliotime3000 dijo

        Excelente. Así ne evito la molestia de instalar el XCalc a la hora de usar el X11 puro.

      3.    KZKG^Gaara dijo

        Oh no conocía este, genial!!

  2.   clow_eriol dijo

    Gracias, es bastante útil 😉

    1.    KZKG^Gaara dijo

      Gracias ^_^

  3.   Noctuido dijo

    Gracias. A la calculadora del sistema le ha salido competidor para operaciones básicas.

    1.    KZKG^Gaara dijo

      Gracias a ti por leernos 🙂

  4.   Joaquin dijo

    Buen tip!

  5.   pedro lala dijo

    no me gusto