How to add arithmetic variables in a script

239,954

Solution 1

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/*

Solution 2

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"

Solution 3

You could declare the type of variable first:

    declare -i a=0
    declare -i num=0

Solution 4

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)

Solution 5

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
Share:
239,954

Related videos on Youtube

curious
Author by

curious

Updated on September 18, 2022

Comments

  • curious
    curious almost 2 years

    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.

  • user1678213
    user1678213 over 11 years
    always give space on both sides of operator when using expr command for calculation.
  • Time4Tea
    Time4Tea over 6 years
    Voted down, as the answer doesn't appear to address the question.
  • Leo
    Leo over 6 years
    Sorry guys, now corrected
  • Weijun Zhou
    Weijun Zhou over 6 years
    No need for the $ inside ((...)). a=$((a+num)) is already fine.
  • Kusalananda
    Kusalananda almost 6 years
    This adds nothing to what has already been said.
  • Hatem Badawi
    Hatem Badawi almost 6 years
    it is the brief answer
  • Bharat
    Bharat almost 6 years
    if a variable is not set or having null value, would this work, if no any other way to handle that.