How to add arithmetic variables in a script

I want to accumulate the line size of a number of files contained in a folder. I have written the following script:

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

What i am geting at the end of the script is 123+234+432+… and not the result of the arithmetic operation of addition.

Asked By: curious

||

Your arithmetic evaluation syntax is wrong. Use any of the following (the first is extremely portable but slow, the second is POSIX and portable except to the Bourne shell and earlier versions of the Almquist shell, the last three require ksh, bash or zsh):

a=`expr "$a" + "$num"`

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

((a=a+num))

let a=a+num

((a+=num))

Or you can just skip the entire for loop and just do:

wc -l folder/*

Or, if you only want the total:

cat folder/* | wc -l

Or with zsh and its mult_ios option:

wc -l < folder/*
Answered By: manatwork

you can also use this code

    a=`expr $a + $num`
    echo $a

and MAKE SURE THAT THERE IS A SPACE ON BOTH SIDES OF + IN “$a + $num”

Answered By: user1678213

You could declare the type of variable first:

    declare -i a=0
    declare -i num=0
Answered By: Code42

Sorry, previous edit was for a different post. Here, just a small modification to the original script:

let a=0
let num=0
for i in folder/*
do
        num=`cat $i | wc -l`
        a=$(echo $a+$num|bc)
done
echo $a
Answered By: Leo

i make it like this

MY_VARIABLE=$((num1+num2))
Answered By: Hatem Badawi

The answer needs to specify in which shell the code is valid.
For instance in the bourne Shell (sh) only the following instructions are valid:

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

while the other possibilities listed by @manatwork may be valid in bourne again shell (bash)

Answered By: loved.by.Jesus
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.