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.