Como adicionar variáveis aritméticas em um script

19

Eu quero acumular o tamanho da linha de vários arquivos contidos em uma pasta. Eu escrevi o seguinte script:

let a=0
let num=0
for i in folder/*
do
        num='cat $i | wc -l'
        a=$a+$num
done
echo $a

O que eu estou obtendo no final do script é 123 + 234 + 432 + ... e não o resultado da operação aritmética de adição.

    
por curious 07.11.2012 / 11:30

6 respostas

40

Sua sintaxe de avaliação aritmética está errada. Use qualquer um dos itens a seguir (o primeiro é extremamente portátil, mas lento, o segundo é POSIX e portátil, exceto para o shell Bourne e versões anteriores do shell Almquist, os últimos três exigem ksh , bash ou zsh ):

a='expr "$a" + "$num"'

a=$(($a+$num))

((a=a+num))

let a=a+num

((a+=num))

Ou você pode pular todo o loop for e fazer:

wc -l folder/*

Ou, se você quiser apenas o total:

cat folder/* | wc -l

Ou com zsh e sua opção mult_ios :

wc -l < folder/*
    
por 07.11.2012 / 11:36
5

você também pode usar este código

    a='expr $a + $num'
    echo $a

e CERTIFIQUE-SE DE QUE EXISTE UM ESPAÇO EM AMBOS OS LADOS DE + IN "$ a + $ num"

    
por 07.11.2012 / 11:42
2

Você pode declarar primeiro o tipo de variável:

    declare -i a=0
    declare -i num=0
    
por 19.10.2015 / 06:56
1

Desculpe, a edição anterior foi para um post diferente. Aqui, apenas uma pequena modificação no script original:

let a=0
let num=0
for i in folder/*
do
        num='cat $i | wc -l'
        a=$(echo $a+$num|bc)
done
echo $a
    
por 30.01.2018 / 23:03
0

A resposta precisa especificar em qual shell o código é válido. Por exemplo, no Shell bourne ( sh ) apenas as seguintes instruções são válidas:

a=$((a+num))
a=$(($a+$num))

enquanto as outras possibilidades listadas pelo @manatwork podem ser válidas no shell bourne novamente ( bash )

    
por 05.12.2018 / 15:54
-1

eu faço assim

MY_VARIABLE=$((num1+num2))
    
por 05.08.2018 / 16:28