How can I add numbers in a Bash script?
bash, integer-arithmetic, mathematical-expressions
Solution
For integers:
Use arithmetic expansion: `$((EXPR))`
num=$((num1 + num2))
num=$(($num1 + $num2)) # Also works
num=$((num1 + 2 + 3)) # ...
num=$[num1+num2] # Old, deprecated arithmetic expression syntax
Using the external `expr` utility. Note that this is only needed for really old systems.
num=`expr $num1 + $num2` # Whitespace for expr is important
For floating point:
Bash doesn't directly support this, but there are a couple of external tools you can use:
num=$(awk "BEGIN {print $num1+$num2; exit}")
num=$(python -c "print $num1+$num2")
num=$(perl -e "print $num1+$num2")
num=$(echo $num1 + $num2 | bc) # Whitespace for echo is important
You can also use scientific notation (for example, `2.5e+2`).
Common pitfalls:
When setting a variable, you cannot have whitespace on either side of `=`, otherwise it will force the shell to interpret the first word as the name of the application to run (for example, `num=` or `num`)
`num= 1` `num =2`
`bc` and `expr` expect each number and operator as a separate argument, so whitespace is important. They cannot process arguments like `3+` `+4`.
`num=`expr $num1+ $num2``
Problem
I have this Bash script and I had a problem in line 16. How can I take the previous result of line 15 and add it to the variable in line 16? ``` #!/bin/bash num=0 metab=0 for ((i=1; i<=2; i++)); do for j in `ls output-$i-*`; do echo "$j" metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15) num= $num + $metab (line16) done echo "$num" done ```