Use let
de bash para avaliar expressões aritméticas.
#!/bin/bash
a='echo 3'
b='echo 5'
let c=$a+$b
echo $c
Basta substituir as chamadas para echo
pelas suas chamadas de programa.
Digamos que eu tenha um comando chamado foo
, que imprime um número na tela quando chamado:
$ foo
3
Digamos também que tenha outro comando chamado bar
, que imprime outro número na tela quando chamado:
$ bar
5
Eu estou olhando para escrever um script de shell que irá juntar aritmeticamente a saída de foo
e bar
(3 + 5 = 8). Como eu faria isso? (As saídas dos comandos não são conhecidas antes do tempo. Elas são as 3 e 5 da última vez que foram executadas. Elas poderiam ter sido outra coisa.)
Uma alternativa para let
é usar a sintaxe de parênteses duplos:
(( c = $(foo) + $(bar) ))
ou
echo $(( $(foo) + $(bar) ))
ou usando variáveis, você pode omitir o cifrão no lado direito dos iguais:
(( c += $(foo) + num ))
(que também ilustra uma atribuição incremental)
Se você estiver usando não-inteiros, use bc
:
echo "$(foo) + $(bar)" | bc
ou
c=$(echo "$(foo) + $(bar)" | bc)
Uma vantagem de usar parênteses duplos é que você pode colocar espaços ao redor dos operandos e operadores para tornar as coisas mais legíveis:
(( c = ( a + b ) * ( i - j ) ))
bash:
bc < <({ foo ; echo + ; bar ; } | tr '\n' ' ' ; echo)
Se a saída for somente inteiros:
$(( $(foo) + $(bar) ))
Tags bash unix shell-script script