Pular para o conteúdo

Operações matemáticas diretamente pelo bash

Dica publicada em Shell Script / Variáveis
Paulo Dias di4s
Hits: 30.194 Categoria: Shell Script Subcategoria: Variáveis
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Operações matemáticas diretamente pelo bash

Uma coisa que chama a atenção em Shell Scripts, são as operações matemáticas.

Em Shell Script, a princípio, elas não são resolvidas diretamente. Para resolver essas operações, é necessário usar algum comando auxiliar, por exemplo:

a=1;
b=2;
#c=$a+$b;  #Não iria funcionar
d=$(( $a + $b ));  #Assim funciona, também poderia ser $(( a + b ))


Obs.: também é possível usar os comandos let, expr e bc para resolver operações matemáticas.

Mas essa característica, apesar de ser o padrão, pode ser modificada usando o comando declare -i para criar as variáveis, veja:

a=1;
b=2;
declare -i c;  #A variável c é do tipo inteiro
c=$a+$b;  #A operação é resolvida diretamente... cuidado com os espaços...
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.


Isso garante que a variável "c" é do tipo inteiro, e não vai aceitar outros tipos de valores. Algo parecido com o que ocorre com linguagens fortemente tipadas, mas diferentemente dessas, ao se atribuir um tipo diferente do estipulado não será emitida uma mensagem de erro, veja:

declare -i c;  #c é inteiro
c="paulo";
echo $c  #Imprime 0 (zero)


Ao tentar setar uma string em "c" o valor é desconsiderado, ficando o valor de zero no lugar.

É importante perceber que, usando o comando declare -i, além da variável assumir (parcialmente) características de uma linguagem fortemente tipada, também terá alterações no seu escopo.

Veja os exemplos:

Function teste() {
       a=10;
}

teste  #Executa a função

echo $a  #Imprime 10


Diferente de outras linguagens, as variáveis dentro de funções não são por padrão locais, ou seja, elas irão escapar para o escopo principal quando a função for executada (característica bem estranha, em minha opinião), mas se for usado o comando declare -i, isso não acontece:

Function teste() {
       declare -i a=10;
}

teste

echo $a  #Não imprimi 10


Valeu pessoal, espero que seja útil.

Obs.: se você precisa que as variáveis dentro de funções sejam locais e não quer usar o declare -i, ou as suas variáveis não são numéricas, use "local a=10".

Dica também publicada em: Operações matemáticas com shell script - prmjunior

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Client MySQL com auto-completion e syntax highlighting

Concatene com o Bash e fique contente!

Variáveis compostas em shell script

Script IP Válidos na rede interna

Verificar saída de comando. Será que meu comando deu erro?

Iniciando Script com o Sistema - Configuração no Debian Wheezy

Contribuir com comentário

Entre na sua conta para comentar.