Doing Calculations on the Command Line with the bc Tool and Your Shell
![blog/cards/doing-calculations-on-the-command-line-with-the-bc-tool-and-your-shell.jpg](/assets/blog/cards/doing-calculations-on-the-command-line-with-the-bc-tool-and-your-shell-5b9873ba56e17b9da8d19e11a72fc4ea7c6e5c4e77c9f0051582316d3afed7c4.jpg)
Here's how you can add, subtract, multiply and divide numbers without leaving your terminal.
Quick Jump: Shell Script | bc Tool | Demo Video
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.