Apuntes mientras aprendo sobre software y computadoras.

programación

Programación en Bash: Expansión aritmética

Sigo con esta serie de apuntes para aprender programación en la terminal de Linux utilizando Bash.

Voy a centrarme en el tema de la expansión aritmética y las operaciones matemáticas.

Esto es al mismo tiempo otra parte de la “Guía mínima para empezar a programar en Bash”.

Expansión aritmética en Bash

De alguna forma, los temas de expansión de parametros y expansión aritmética tienen puntos de contacto entre si. En ambos casos podemos modificar y revisar los datos de las variables.

Según el manual:

Arithmetic Expansion
Arithmetic expansion allows the evaluation of an arithmetic expression
and the substitution of the result.

Manual de Bash

Esto es que la expansión aritmética permite la evaluación de operaciones matematicas y la sustitucion de los resultados.

No voy a mentir, el tema todavía parece algo críptico. Creo que voy a entenderlo un poco más al desarrollar algunos ejemplos.

La forma de la expansión aritmética es:

$(( )) 

Si, son dos sets de paréntesis con un signo de dólar por delante.

Para ultra resumirlo, lo que yo entiendo es que todo esto me permite realizar operaciones matemáticas sin recurrir a otros comandos agregados. Hasta el momento, eso es lo más importante que tengo que recordar del tema.

Visto en un ejemplo, puedo crear la variable suma:

suma=$((1+2))

Y ahora utilizar la expansión aritmética para desarrollar su resultado:

echo $suma
3

Listo, ahí lo tengo. Se puede decir que estoy “expandiendo” la variable “suma” al resultado de su valor.

Pero esto no se termina, puedo hacer tras cosas. Por ejemplo:

A=2
B=4

echo $((A+B))
6

Con esta herramienta puedo hacer sumas, restas, divisiones y multiplicaciones sin necesiad de otra cosa.

El detalle a tener en cuenta es: la expansión matemática solamente trabaja con números enteros, no puede entregarnos decimales. Esto es, no trabaja con “floats” a menso que usemos comandos como por ejemplo “bc” o “awk”.

Lo que sigue son solamente tres casos extra de comandos que también me permiten trabajar con números.

Operaciones matemáticas en Bash utilizando comandos

El comando expr

Según el manual de instrucciones:

NAME
expr – evaluate expressions

manual de expr

Esto es “expr” evalúa argumentos.

Esto tiene opciones interesantes, por ejemplo puede servir para saber si dos datos son iguales o no, Si los argumentos son iguales (la comparacipón es verdadera) la respuesta es “1”. Y si la comparación es falsa, la respusta es “0”.

Esto sirve para evaluar cualquier tipo de datos, no solamente números:

~$ expr A = A
1

Se puede conocer otras fromas de usar el comando haciendo en la terminal:

expr --h

A la vez puedo usar el comando para otras operaciones con números:

expr 1 + 2
3

O una división:

expr 5 / 2
2

Buscaba una respuesta más similar a 2.5 o algo por el estilo…. pero este también se se maneja solo con números enteros (es decir, con integers y no con floats).

Y entre otras cosas puedo usarlo para conocer la cantidad de letras en un texto (string):

expr length hola
4

En general, expr permite varias cosas más, como por ejemplo comparar números para ver cual es más grande, ese tipo de cosas.

El comando let:

Hasta donde yo, se no hay entrada manual para let. Pero puedo ver la página de ayuda con:

let --help

De ahí obtengo lo que necesito saber de su forma de uso.

Evaluate arithmetic expressions.

Evaluate each ARG as an arithmetic expression.
página de ayuda para let

Segun eso let evalúa cada argumento como una expresión aritmética. Para empezar a entenderlo, voy a probar con una suma simple.

Y es bueno aclararlo ahora, en este caso la sintaxis espera que NO dejemos espacios entre las cifras.

let 1+2

Y nada sucede. No hay resultado. Al parecer “let” permite también la expansión aritmética. Por lo que para usarlo necesito asociar el valor a una variable:

let "x=1+2"
echo $x
3

O puedo usar este comando para por ejemplo realizar una operación incremental:

let "var1 = 10"
let "var2 = var1++"
echo $var1 $var2
10 11

Utilizando ++ incremento en 1 la variable “var1”.

Otra vez, al igual que expr, let solamente ,me permite trabajar con números enteros.

Operaciones con bc

NAME
bc – An arbitrary precision calculator language

manual bc

El manual presenta bc como un lenguaje para trabajar con números, variables, declaraciones y muchas otras cosas. Esto incluye librerías, y distintos modos de uso.

Su sintaxis “promete ser similar al lenguaje de programación C”. De más esta decir que al escribir todo esto el asunto me pasa muy por arriba de la cabeza.

Por lo que pude revisarlo, puedo invocar este comando por ejemplo de esta forma:

echo "3-2" | bc
1

Y también una división:

echo "5/2" | bc -l
2.50000000000000000000

Es cierto, solamente conozco lo que puede hacer bc de una forma muy superficial.

Pero al menos ahora puede conseguir un resultado con decimales y eso es una victoria sin dudas.

Conclusión:

En este apunte aprendí sobre operaciones matemáticas dentro de lo que es programación en Bash .

Creo que de todo esto, lo más importante es crear al menos una idea del concepto de expansión aritmética.

Estas herramientas pueden servir luego en programas más complejos, por ejemplo creando cuentas regresivas o aumentando el valor de alguna variable.

Ya sea que hayas aprendido algo nuevo o no, me gustaría leer tus opiniones en los comentarios. De ese modo me vas a ayudar para poder mejorar este sitio web.

Hasta el próximo apunte.

Recursos:

Leave a Reply