Operaciones aritméticas

( desarrollo / bash )

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:

  1. 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, derecha

    Ejemplos:

    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)
  2. usando comillas invertidas `` se utiliza en conjunción con expr y es el menos recomendado ya que usa una aplicación externa. Ejemplos:
    a=`expr 5 % 3`  # módulo
    b=`expr $a + 3` # suma
    area[5]=`expr ${area[11]} + ${area[13]}` # suma de 2 arrays
  3. usando let menos usado pero igual de eficiente que (( )), es más al estilo del Basic ;-). Ejemplos:
    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)
Modificado el 17 de julio de 2013
Creado el 22 de diciembre de 2009
   

Compartiendo conocimiento desde 1995 - I.M.D. I.M.D.