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 using the echo command:
echo $(( 10 + 5 ))
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 ./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 ./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
+ - addition, subtraction
<< >> 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