Fazendo comparações no shell com números de ponto flutuante
Dica publicada em Shell Script / Introdução
Fazendo comparações no shell com números de ponto flutuante
Quando se trabalha com scripts em shell, pode ser necessário realizar comparações e operações com números de ponto flutuante. Entretanto, o shell padrão não lida bem com esses números diretamente, então precisamos usar a calculadorabc para essas operações.Abaixo, temos um exemplo de script que realiza um loop utilizando números de ponto flutuante. Explicarei cada parte do script para que você possa entender como ele funciona e adaptá-lo conforme suas necessidades.
Script:
#!/bin/bash
# Fazendo comparações no shell, com números de ponto flutuante.
# Nesse exemplo, mostro como fazer um loop, com números de ponto flutuante.
# Repare que as variáveis estão com a primeira letra maiúscula.
Nu=1.11144 # Inicializa a variável Nu com um valor de ponto flutuante
Max=10.567 # Define o valor máximo para a comparação
# Realiza uma comparação inicial usando bc e armazena o resultado na variável Cond.
Cond=$(bc <<< "$Nu < $Max")
# Enquanto a condição for verdadeira (Cond igual a 1), o loop continuará executando.
while [ $Cond == 1 ]; do
echo "Número : $Nu" # Exibe o valor atual de Nu
# Incrementa Nu em 1.33 usando bc e atualiza o valor de Nu
Nu=$(bc <<< "$Nu + 1.33")
# Atualiza a condição para a próxima iteração do loop
Cond=$(bc <<< "$Nu < $Max")
done
Explicação do Script
1. Inicialização das Variáveis:
Nu=1.11144: Define a variávelNucom um valor inicial de ponto flutuante.Max=10.567: Define a variávelMaxcomo o valor limite para o loop.
2. Primeira Comparação:
Cond=$(bc <<< "$Nu < $Max"): Utiliza a calculadorabcpara compararNucomMax. O resultado da comparação (1para verdadeiro ou0para falso) é armazenado na variávelCond.
3. Loop While:
while [ $Cond == 1 ]; do: O loop continuará executando enquantoCondfor igual a1(ou seja, enquantoNufor menor queMax).
echo "Número : $Nu": Exibe o valor atual deNuno terminal.Nu=$(bc <<< "$Nu + 1.33"): IncrementaNuem1.33usandobce atualiza o valor deNu.Cond=$(bc <<< "$Nu < $Max"): Recalcula a condição para a próxima iteração do loop.
bc. Adaptar este script às suas necessidades específicas permitirá que você realize operações matemáticas mais complexas diretamente no seu shell script.Espero que esta dica tenha sido útil! Se tiver alguma dúvida ou sugestão, sinta-se à vontade para compartilhar nos comentários.
______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10