16

The only calculator I know is bc. I want to add 1 to a variable, and output to another variable.

I got the nextnum variable from counting string in a file:

nextnum=`grep -o stringtocount file.tpl.php | wc -w`

Lets say the nextnum value is 1. When added with 1, it will become 2. To calculate, I run:

rownum=`$nextnum+1 | bc`

but got error:

1+1: command not found

I just failed in calculation part. I've tried changing the backtick but still not works. I have no idea how to calculate variables and output it to another variable.

apasajja
  • 1,917
  • 1
    Have a look at http://unix.stackexchange.com/questions/40786/how-can-i-do-command-line-integer-float-calculations-in-bash-or-any-language – Ulrich Dangel Oct 08 '12 at 10:08

4 Answers4

29

The substring inside the ` ` must be a valid command itself:

rownum=`echo $nextnum+1 | bc`

But is preferable to use $( ) instead of ` `:

rownum=$(echo $nextnum+1 | bc)

But there is no need for bc, the shell is able to do integer arithmetic:

rownum=$((nextnum+1))

Or even simpler in bash and ksh:

((rownum=nextnum+1))
manatwork
  • 31,277
11

You can also use built in arithmetic in bash:

rownum=$((nextnum+1))

which would be slightly faster.

GAD3R
  • 66,769
Julian
  • 909
  • 5
  • 5
2

Absolutely right and complete the suggested solutions, just to mention the way it has to be done in former times when only the Bourne-Shell was available, that's the way it likes it:

rownum=`expr $nextnum + 1` 
numchrun
  • 508
1

I would use (as was mentioned before) rownum=$((nextnum+1)) or ((rownum=nextnum+1)) but if you prefer an standard command you can use the let command, like let rownum=$nextnum+1