Doing Calculations on the Command Line with the bc Tool and Your Shell

Here's how you can add, subtract, multiply and divide numbers without leaving your terminal.
Once in a while you may find yourself wanting to do a quick calculation on the
command line or within a shell script. I typically reach for the bc tool for
this but your shell also has a few ways to do basic calculations.
# Shell Script
Here’s a couple of examples using $(( ... )) which is POSIX compliant, you
can use let or expr too but they tend to be less portable:
$ echo $(( 2 + 2 ))
4
$ echo $(( 3 * 3 ))
9
$ echo $(( 4 % 3 ))
1
$ value=$(( 5 - 3 )) && echo $(( value += 1 ))
3
Where this tends to fall short is when you want to deal with decimals.
For example with sh or bash:
$ echo $(( 2 * 2.25 ))
bash: 2 * 2.25 : syntax error: invalid arithmetic operator (error token is ".25 ")
Note, if you’re using zsh the above will work because it handles decimals,
but at least for me while I do use zsh, I tend to use sh or bash in my
scripts so I wouldn’t depend on zsh.
# bc Tool
Quite a few systems will have bc installed by default, but if not you can
install it with your package manager of choice such as apt-get install bc,
here’s a few examples:
$ bc <<< "2 + 3 - 4"
1
$ bc <<< 2+3-4
1
$ bc <<< "4 % 3"
1
$ value="$(bc <<< "3 * 5")" && echo "${value}"
15
$ bc <<< 1/4
0
$ bc -l <<< 1/4
.25000000000000000000
$ bc <<< "scale=3; 1/4"
.250
By adding the -l flag, that will configure bc to handle decimals which
defaults to 20 decimal places. Alternatively you can set scale=x where x is
how many decimal places you want. When you don’t supply either option it rounds
down to 0 decimal places.
The bc tool can do a whole lot more, I suggest skimming man bc for more
details but if you’re in a pinch to do some basic math on the command line it’s
quite handy.
I used it in my invoice script and you can use it to calculate arbitrary expressions or anytime it makes sense!
The video below demos some of the commands.
# Demo Video
Timestamps
- 0:09 – Using functionality built into your shell
- 1:47 – Using the bc tool
- 3:01 – Handling decimals
When was the last time you did math on the command line? Let me know below.