Operações matemáticas diretamente pelo bash

Publicado por Paulo Dias em 10/04/2013

[ Hits: 21.694 ]

Blog: http://naotenhosite.eu.nao.tenho

 


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...


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

Outras dicas deste autor

Client MySQL com auto-completion e syntax highlighting

Leitura recomendada

Economize energia, um bem precioso

Endereço IP como variável

Compilar programas com muitos parâmetros

Site para montar regras de iptables

Truques para tratamento de variáveis em shell script

  

Comentários
[1] Comentário enviado por phoemur em 10/04/2013 - 10:37h

Você poderia também usar herestrings, utilizando três sinais de menor (<<<) por exemplo assim:

$bc <<< 4*4


http://bash.cyberciti.biz/guide/Here_strings


Vlw



Contribuir com comentário