# Perform arithmetic operations

You can perform math operations on Bash shell variables. The bash shell has built-in arithmetic option. You can also use external command such as expr and bc calculator.

## Arithmetic Expansion in Bash Shell

Arithmetic expansion and evaluation is done by placing an integer expression using the following format:

```\$((expression))
\$(( n1+n2 ))
\$(( n1/n2 ))
\$(( n1-n2 ))
```

### Examples

Add two numbers on fly and display output using the echo command or printf command:

```echo \$(( 10 + 5 ))
```

OR

```printf "13 + 13 = %d\n" \$(( 13 + 13 ))
```

Add two numbers using x and y variable. Create a shell program called add.sh using a text editor:

```#!/bin/bash
x=5
y=10
ans=\$(( x + y ))
echo "\$x + \$y = \$ans"
```

Save and close the file. Run it as follows:

```chmod +x add.sh
```

Sample Outputs:

`5 + 10 = 15`

Create an interactive program using the read command called add1.sh using a text editor:

```#!/bin/bash
read -p "Enter two numbers : " x y
ans=\$(( x + y ))
echo "\$x + \$y = \$ans"
```

Save and close the file. Run it as follows:

```chmod +x add1.sh
```

Sample Outputs:

```Enter two numbers : 20 30
20 + 30 = 50```

#### Mathematical Operators With Integers

Operator Description Example Evaluates To
+ Addition echo \$(( 20 + 5 )) 25
- Subtraction echo \$(( 20 - 5 )) 15
/ Division echo \$(( 20 / 5 )) 4
* Multiplication echo \$(( 20 * 5 )) 100
% Modulus echo \$(( 20 % 3 )) 2
++ post-increment (add variable value by 1) x=5
echo \$(( x++ ))
echo \$(( x++ ))
5
6
-- post-decrement (subtract variable value by 1) x=5
echo \$(( x-- ))
4
** Exponentiation x=2
y=3
echo \$(( x ** y ))
8

#### Order of Precedence

Operators are evaluated in order of precedence. The levels are listed in order of decreasing precedence (quoting form the bash man page).

```       id++ id--
variable post-increment and post-decrement
++id --id
variable pre-increment and pre-decrement
- +    unary minus and plus
! ~    logical and bitwise negation
**     exponentiation
* / %  multiplication, division, remainder
<< >>  left and right bitwise shifts
<= >= < >
comparison
== !=  equality and inequality
&      bitwise AND
^      bitwise exclusive OR
|      bitwise OR
&&     logical AND
||     logical OR
expr?expr:expr
conditional operator
= *= /= %= += -= <<= >>= &= ^= |=
assignment
expr1 , expr2
comma
```