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)