Operações Aritméticas em Scripts Shell com Bash

Operadores Aritméticos no Bash

Os operadores no Bash seguem as mesmas regras de prioridade, associatividade e comportamento da linguagem C. A tabela abaixo lista os operadores em ordem decrescente de prioridade.

Operador Função
id++, id-- Incremento e decremento pós-operação
++id, --id Incremento e decremento pré-operação
-, + Unário negativo e positivo
!, ~ Negação lógica e bitwise
** Exponenciação
*, /, % Multiplicação, divisão, módulo
+, - Adição, subtração
<<, >> Deslocamento à esquerda e à direita
<=, >=, <, > Comparações
==, != Igualdade, desigualdade
& AND bitwise
^ XOR bitwise
| OR bitwise
&& AND lógico
|| OR lógico
expr?expr:expr Operador condicional
=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= Atribuição
expr1, expr2 Operador vírgula (usado principalmente em loops for)

O operador vírgula avalia múltiplas expressões aritméticas e retorna o valor da última. Exemplo:

$ let resultado=(5*3, 12-4, 18%7)
$ echo $resultado
4

$ let contador=0, valor=100
$ echo $valor
100

Constantes Numéricas

Por padrão, expressões aritméticas no Shell usam números decimais.

$ let decimal=15
$ echo "Decimal: $decimal"
Decimal: 15

$ let octal=017 # Octal com prefixo 0
$ echo "Octal: $octal"
Octal: 15

$ let hexadecimal=0xF # Hexadecimal com prefixo 0x
$ echo "Hexadecimal: $hexadecimal"
Hexadecimal: 15

$ let binario=2#1101 # Binário com prefixo base#
$ echo "Binário: $binario"
Binário: 13

$ let base16=16#1F # Base 16
$ echo "Base-16: $base16"
Base-16: 31

Expansão Aritmética e Comando let

A expansão aritmética calcula uma expressão e a substitui pelo resultado. Formato: $((EXPRESSSÃO)). As expressões podem ser aninhadas.

$ valor=8
$ valor=$(( valor * 2 + 3 ))
$ echo $valor
19

$ a=20
$ b=7
$ resto=$(( a % b ))
$ echo $resto
6

$ condicao=$(( 5 > 2 ))
$ echo $condicao # Verdadeiro retorna 1
1

$ x=50
$ y=30
$ max=$(( (x>y) ? x : y ))
$ echo $max
50

O comando let avalia expressões aritméticas de esquerda para direita, supotrando apenas intieros. Se a última expressão avaliada como verdadeira (1), retorna código de saída 0; caso contrário, 1.

$ let num=10
$ let num+=5
$ echo $num
15

$ let "num = num * 3"
$ echo $num
45

$ let "num >>= 2"
$ echo $num # Deslocamento à direita por 2 bits
11

$ let num++
$ echo $num
12

$ let "num = num < 20 ? num : 20"
$ echo $num
12

Comando expr

O comando expr é uma ferramenta de linha de comando para avaliar expressões. Requer espaços em torno dos operadores e exige escaping para alguns símbolos.

$ expr 4 + 7
11
$ expr 4+7 # Sem espaços, imprime a expressão
4+7

$ expr 5 \* 9 # Operador * precisa de escaping
45
$ expr 3 \< 8 # Operador < precisa de escaping
1
$ expr 10 \>= 4 # Operador >= precisa de escaping
1

$ var1=12
$ var2=5
$ produto=$(expr $var1 \* $var2) # Usando substituição de comando
$ echo $produto
60

Tags: Bash Shell Scripting arithmetic operations Linux shell

Publicado em 7-10 08:31