Operações matemáticas diretamente pelo bash

Publicado por Paulo Dias em 10/04/2013

[ Hits: 29.004 ]

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

Variáveis compostas em shell script

DictConv: Converta dicionários do Babylon para o StarDict

Como lidar com variáveis retornadas pelo Expect - removendo CR do fim de linha

Números aleatórios em shell script

Atendimento ou suporte remoto em estações de trabalho via VNC

  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts