Shell Scripting – Cálculos aritméticos simples no bash – 10

Cálculos aritméticos em Shell Scripting

Realizar cálculos aritméticos é uma das operações mais importantes em scripts de shell. O shell permite fazer cálculos simples, como soma, subtração, multiplicação e divisão, através de diversas formas.

Neste tutorial, veremos como usar operadores aritméticos no shell, com exemplos práticos.

Operadores aritméticos básicos no shell

No shell, os cálculos aritméticos podem ser feitos de forma simples, usando operadores comuns como:

  • Soma (+)
  • Subtração (-)
  • Multiplicação (*)
  • Divisão (/)
  • Módulo (resto da divisão) (%)
  • Incremento (++)
  • Decremento (–)

Vejamos como usar esses operadores para fazer cálculos no shell Bash.

Como fazer cálculos no shell

Para realizar cálculos em shell, podemos usar três métodos principais:

1. Com o comando expr
2. Com (( )) (expressões aritméticas)
3. Com o comando let

Vejamos cada um desses casos. Para os exemplo, vamos assumir um script de nome aritmetica.sh, com a devida permissão de execução já atribuída.

1. Usando expr

O comando expr é utilizado para avaliar expressões aritméticas. Contudo, é necessário ter muito cuidado com espaços, pois expr precisa de espaços antes e depois de cada operador.

Exemplo de soma com expr:

#!/bin/bash
a=5
b=3
res=$(expr $a + $b)
echo "Resultado da soma: $res"

Saída:

Resultado da soma: 8

Note que, ao usar expr, o comando é executado dentro de $( ) (substituição de comando), e os operadores precisam de espaços.

Exemplo de divisão com expr:

#!/bin/bash
a=12
b=2
res=$(expr $a / $b)
echo "Resultado da divisão: $res"

Saída:

Resultado da divisão: 6

Note que o resultado será sempre um número inteiro, mesmo que haja parte fracionária resultante no cálculo.

2. Usando (( )) (expressões aritméticas)

O método (( )) é muito mais direto e permite uma sintaxe mais simples para cálculos aritméticos. Aqui, podemos usar os operadores de forma mais parecida com uma linguagem de programação tradicional.

Exemplo de soma com (( )):

#!/bin/bash
a=5
b=3
(( res = a + b ))
echo "Soma: $res"

Saída:

Soma: 8

No caso de (( )), a variável resultado é atribuída diretamente com a operação, sem a necessidade de usar o comando expr ou $(). Além disso, não há a necessidade de colocar espaços em torno dos operadores.

Exemplo de multiplicação com (( )):

#!/bin/bash
a=5
b=3
(( res = a * b ))
echo "Produto: $res"

Saída:

Produto: 15

3. Usando o comando let

O comando let é outra forma de realizar cálculos aritméticos, permitindo fazer as operações diretamente.

Exemplo de soma com let:

#!/bin/bash
a=5
b=3
let res=$a+$b
echo "Resultado da soma: $res"

Saída:

Resultado da soma: 8

O comando let também funciona de forma semelhante ao (( )), mas é um pouco mais antigo e menos utilizado.

Considerações sobre divisão em scripts

Quando usamos o operador de divisão (/) em cálculos de shell, ele realiza uma divisão inteira. Ou seja, a parte decimal é descartada, e o resultado é arredondado para baixo.

Exemplo de divisão com (( )) (com resultado inteiro):

#!/bin/bash
a=10
b=3
(( res = a / b ))
echo "Resultado da divisão inteira: $res"

Saída:

Resultado da divisão inteira: 3

Se fosse utilizado expr ou let, o comportamento seria o mesmo, descartando a parte decimal.

Como lidar com divisão de números decimais

Para lidar com cálculos com números decimais (ponto flutuante), podemos usar o comando bc, que permite realizar operações matemáticas com precisão maior. Vamos ver um exemplo:

Exemplo de divisão com ponto flutuante usando bc:

#!/bin/bash
a=10
b=3
resultado=$(echo "scale=2; $a / $b" | bc)
echo "Resultado da divisão com ponto flutuante: $resultado"

Saída:

Resultado da divisão com ponto flutuante: 3.33

O comando scale=2 define a precisão de dois dígitos após a vírgula.

Erro de Divisão por Zero

Note que, se a variável $b tiver o valor igual a zero, ocorrerá um erro de divisão por zero ao executar o script, como segue:

Runtime error (func=(main), adr=12): Divide by zero

Para evitar e tratar esse erro, podemos fazer uma validação do valor de b usando uma estrutura exibindo a mensagem personalizada “Erro: Divisão por zero não é permitida.”, e pulando a divisão.

Já se b não for zero, o cálculo é realizado normalmente usando o comando bc, e o resultado é exibido:

#!/bin/bash
a=10 # Defina o valor de a
b=0 # Defina o valor de b para testar divisão por zero
if [ "$b" -eq 0 ]; then
  echo "Erro: Divisão por zero não é permitida."
else
  resultado=$(echo "scale=2; $a / $b" | bc)
  echo "Resultado da divisão: $resultado"
fi

Calcular raiz quadrada em scripts do shell

Usando a calculadora bc em scripts do shell podemos realizar cálculos mais avançados e complexos, por exemplo envolvendo o uso de senos, cossenos, logaritmos, raízes e exponenciais. No exemplo abaixo, por exemplo, criamos um script que recebe um número como argumento e retorna sua raiz quadrada:

num=$1
raiz=$(echo "scale=2. sqrt($num)" | bc)
echo "Raiz Quadrada de $num é igual a $raiz"

Para testar, invocamos o script no terminal passando um valor qualquer, como 81:

$ ./aritmetica.sh 81

Saída:

Raiz Quadrada de 81 é igual a 9.00

Exercícios: Operações aritméticas em scripts do shell

Abaixo trago uma lista com alguns exercícios sobre operadores aritméticos no shell para treino.

1. Soma de dois números
Crie um script que receba dois números como argumentos e calcule a soma entre eles.
Exemplo de execução:
./soma.sh 10 20

2. Calcular o quadrado de um número
Crie um script que receba um número e calcule seu quadrado (multiplicação do número por ele mesmo).

3. Cálculo de média
Crie um script que receba três notas e calcule a média aritmética dessas notas.

4. Média aritmética ponto flutuante
Crie um script que receba três notas e calcule a média aritmética dessas notas., considerando números decimais.

5. Operações combinadas
Crie um script que realize as seguintes operações:

  1. Receber dois números e calcular a soma.
  2. Subtrair 5 do resultado da soma.
  3. Multiplicar o resultado final por 3.

Resolução dos exercícios

Exercício 1

#!/bin/bash
a=$1
b=$2
resultado=$(( a + b ))
echo "Resultado da soma: $resultado"

Exercício 2

#!/bin/bash
a=$1
resultado=$(( a * a ))
echo "O quadrado de $a é: $resultado"

Exercício 3

#!/bin/bash
nota1=$1
nota2=$2
nota3=$3
media=$(( (nota1 + nota2 + nota3) / 3 ))
echo "A média é: $media"

Exercício 4

#!/bin/bash
nota1=$1
nota2=$2
nota3=$3
media=$(echo "scale=2; ($nota1 + $nota2 + $nota3) / 3" | bc)
echo "A média é: $media"

Exercício 5

#!/bin/bash
a=$1
b=$2
soma=$(( a + b ))
resultado=$(( soma - 5 ))
final=$(( resultado * 3 ))
echo "Resultado final: $final"

Conclusão

Neste tutorial, vimos como fazer cálculos aritméticos simples em shell scripting, usando operadores como soma, subtração, multiplicação, divisão e módulo. Também exploramos como realizar cálculos com números de ponto flutuante usando o comando bc e como utilizar variáveis para tornar os scripts mais dinâmicos.

Além disso, apresentamos exercícios práticos para consolidar o aprendizado.

 

Sobre Fábio dos Reis (1226 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*