Any command line calculator for Ubuntu?
You can do simple integer arithmetic natively in bash using the ((...))
syntax, e.g.
$ echo $((10000-9000))
1000
There is also the bc
calculator, which can accept arithmetic expressions on standard input
$ echo "10000-9000" | bc
1000
The bc
program can do floating point arithmetic as well
$ echo "scale = 3; 0.1-0.09" | bc
.01
You can use calc
. Is not installed by default, but you can install it quickly using the following command:
sudo apt-get install apcalc
After you have installed, you can do any calculation do you wish:
$ calc 5+2
7
$ calc 5-2
3
$ calc 5*2
10
$ calc 5/2
2.5
$ calc 5^2
25
$ calc 'sqrt(2)'
1.4142135623730950488
$ calc 'sin(2)'
0.9092974268256816954
$ calc 'cos(2)'
-0.416146836547142387
$ calc 'log(2)'
~0.30102999566398119521
$ calc 'sqrt(sin(cos(log(2))))^2'
~0.81633199125847958126
$ # and so on...
For more information , view its man-page
Bash Arithmetic
Another possible solution is to add a simple function for Bash's builtin arithmetic. Put this in your .bashrc
file to try:
=() {
echo "$(($@))"
}
So now, you don't even need $((...))
anymore, just =
which seems natural enough.
Replacement
Another thing if you want to be even faster: you can make it replace p
with +
and x
with *
. This will work for that:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
Now you don't even need Shift anymore, the only thing is =
in front of arithmetic.
Hexadecimal output
Output can be displayed in both decimal and hexadecimal, if so desired. (Note: using x
substitution will conflict with the 0x...
hex syntax)
=() {
local answer="$(($@))"
printf '%d (%#x)\n' "$answer" "$answer"
}
Example:
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
Using bc
If you want slightly more advanced calculations, you can pipe it to bc
like so:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
bc -l <<<"scale=10;$calc"
}
= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)' # Returns pi (3.1415926532)
The functions provided by bc
are as follows (and can be found from man bc
):
sqrt ( expression )
The value of the sqrt function is the square root of the expression.
If the expression is negative, a run time error is generated.
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x)
The Bessel function of integer order n of x.
It also supports if
, for
, while
and variables like a programming language though if it may be better to write to a file if you wanted that.
Keep in mind that it will substitute p
and x
in function/variable names. It may be better to just remove the replacements.
Using gcalccmd
You can also make the function call gcalccmd
(from gnome-calculator
) like so:
=() {
local IFS=' '
local calc="$*"
# Uncomment the below for (p → +) and (x → *)
#calc="${calc//p/+}"
#calc="${calc//x/*}"
printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}
= 'sqrt(2)' # Returns 1.4142135623
= '4^4' # Returns 256
The available functions seem to be (taken straight from the source code), ==
denotes equivalent functions:
ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()