Operaciones Artiméticas
Las operaciones aritméticas son esenciales a la hora de programar y el desarrollo de script en Bash no es la excepción. La forma preferida de ejecutar operaciones aritméticas en Bash es utilizando la expansión aritmética. La sintaxis es la siguiente:
$((expresión))
Ejemplo:
i=0
((i=i+1))
echo "i = $i"
Salida:
i = 1
En la siguiente tabla se muestran los operadores aritméticos y su funcionalidad:
Sintaxis | Función |
---|---|
+, -, *, / | Adición, sustracción, multiplicación, división |
++x, x++ | Pre y post incremento |
--x, xx-- | Pre y Post decremento |
% | Módulo (resto) |
** (o ^) | exponenciación |
abs | Valor absoluto |
sqrt | Raíz cuadrada |
Orden de precedencia
Al momento de evaluar una expresión aritmética en Bash, es importante tener en cuenta el orden de precedencia de los operadores artiméticos. Este orden determina el orden en el cual los operadores son evaluados.
El orden de precedencia para los operadores aritméticos básicos es el siguiente:
- Multiplicación y división (evaluado de izquierda a derecha)
- Suma y resta (evaluado de izquierda a derecha)
Incremento/Decremento
Operadores + y -
La forma más simple de incrementar/decrementar una variable es utilizando los operadores + y -:
i=$((i+1))
((i=i+1))
j=$((j-1))
((j=j-1))
Ejemplos:
i=0
until [ $i -gt 3 ]; do
echo i: $i
((i=i+1))
done
Salida:
i: 0
i: 1
i: 2
i: 3
</div>
<div class='pageitem'>
Operadores ++ y --
Estos operandos son utilizados para incrementar/decrementar una variable en 1:
((i++))
((j--))
Los operadores puede ser usados en forma prefija o posfija:
Incremento prefijo: ((++i))
Incremento posfijo: ((i++))
Decremento prefijo: ((--j))
Decremento posfijo: ((j--))
Operadores += y -=
Estos operadores son usados para incrementar/decrementar una variable en un valor específico:
((i+=15))
En el siguiente ejemplo se decrementa el valor de la variable i en 5:
i=20
while [ $i -ge 5 ]; do
echo Número: $i
((i-=5))
done
Resultado:
Número: 20
Número: 15
Número: 10
Número: 5
Operaciones en punto flotante
De forma predeterminada, Bash ejecuta las operaciones artiméticas con números enteros. En el siguiente ejemplo se puede observar ese comportamiento :
echo $((50/6))
8
La respuesta correcta deberia ser 8.33
Para el manejo de números en punto flotante (decimales) es necesario recurrir a una herramienta adicional, siendo la más popular bc.
echo "50/6" | bc -l
8.33333333333333333333
bc permite controlar el número de dígitos decimales a mostrar:
echo "scale=3; 50/6" | bc -l
8.333