Operaciones aritméticas
Como hacer operaciones aritméticas con enteros dentro de Bash que el manual de Bash lo llama Expansión aritmética. Se puede hacer de tres formas:
usando doble paréntesis (( )) es el uso correcto, se puede usar (( )) o $(( )) y dentro se puede usar la variable con o sin $.
VAR++ VAR-- → post-incrementa, post-decrementa++VAR --VAR → pre-incrementa, pre-decrementa+ - → suma, resta** → potencia (^)* / % → multiplicación, división, resto (módulo)== != → igualidad, diferencia< > <= >= → comparación! && || → operadiores lógicos NOT, AND, OR~ & | ^ → operadores a nivel de bit NOT, AND, OR, XOR<< >> → desplazamiento a nivel de bit izquierda, derechaEjemplos:
z=$(($z+3)) # Variable con $. z=$((z/3**2)) # Variable sin $, (z/3)^2 $((99 >> 2)) = 24 # 99 (01100011) >>2 (2 bits derecha) = 24 (00011000) (( n += 1 )) # incrementa 1 a n (mal si se usa $n)
a=`expr 5 % 3` # módulo
b=`expr $a + 3` # suma
area[5]=`expr ${area[11]} + ${area[13]}` # suma de 2 arrays
let z=z+3
let "z += 3"
let "Score[1] += ${Score[0]}" # con arrays
Si tenemos el caso de que una variable tiene un número con ceros delante (como por ejemplo 010) lo tomará como OCTAL y no DECIMAL, por lo que las operaciones aritméticas no serán correctas, pero solucionar esto podemos convertir la variable (en sí una cadena de texto) a formato DECIMAL de esta forma:
N=$((10#$N)) # pasamos la variable N a decimal (base 10)