bash shell script que adiciona saída de comandos

4

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

    
por John Kube 22.04.2010 / 19:22

3 respostas

8

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.

    
por 22.04.2010 / 19:39
3

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 ) ))
    
por 22.04.2010 / 20:19
1

bash:

bc < <({ foo ; echo + ; bar ; } | tr '\n' ' ' ; echo)

Se a saída for somente inteiros:

$(( $(foo) + $(bar) ))
    
por 22.04.2010 / 19:39