How to add arithmetic variables in a script
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
Related videos on Youtube
![curious](https://i.stack.imgur.com/7JMMK.jpg?s=256&g=1)
curious
Updated on September 18, 2022Comments
-
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 over 11 yearsalways give space on both sides of operator when using expr command for calculation.
-
Time4Tea over 6 yearsVoted down, as the answer doesn't appear to address the question.
-
Leo over 6 yearsSorry guys, now corrected
-
Weijun Zhou over 6 yearsNo need for the
$
inside((...))
.a=$((a+num))
is already fine. -
Kusalananda almost 6 yearsThis adds nothing to what has already been said.
-
Hatem Badawi almost 6 yearsit is the brief answer
-
Bharat almost 6 yearsif a variable is not set or having null value, would this work, if no any other way to handle that.