The Bash shell performs basic arithmetic operations using the let, (( )), and [] commands. The expr and bc utilities are used to perform advanced operations.
Math with the shell
How to do it...
- A numeric value is assigned to a variable the same way strings are assigned. The value will be treated as a number by the methods that access it:
 
        #!/bin/bash
        no1=4;
        no2=5;
- The let command is used to perform basic operations directly. Within a let command, we use variable names without the $ prefix. Consider this example:
 
        let result=no1+no2
        echo $result
Other uses of let command are as follows:
- Use this for increment:
 
$ let no1++
- For decrement, use this:
 
$ let no1--
- Use these for shorthands:
 
                let no+=6
                let no-=6
These are equal to let no=no+6 and let no=no-6, respectively.
- Alternate methods are as follows:
 
The [] operator is used in the same way as the let command:
result=$[ no1 + no2 ]
Using the $ prefix inside the [] operator is legal; consider this example:
result=$[ $no1 + 5 ]
The (( )) operator can also be used. The prefix variable names with a $ within the (( )) operator:
result=$(( no1 + 50 ))
The expr expression can be used for basic operations:
                    result=`expr 3 + 4`
                    result=$(expr $no1 + 5)
      The preceding methods do not support floating point numbers,
      and operate on integers only.
- The bc application, the precision calculator, is an advanced utility for mathematical operations. It has a wide range of options. We can perform floating point arithmetic and use advanced functions:
 
        echo "4 * 0.56" | bc
        2.24
        no=54;
        result=`echo "$no * 1.5" | bc`
        echo $result
        81.0
The bc application accepts prefixes to control the operation. These are separated from each other with a semicolon.
- Decimal places scale with bc: In the following example, the scale=2 parameter sets the number of decimal places to 2. Hence, the output of bc will contain a number with two decimal places:
 
                echo "scale=2;22/7" | bc
                3.14
- Base conversion with bc: We can convert from one base number system to another one. This code converts numbers from decimal to binary and binary to decimal:
 
                #!/bin/bash
                Desc: Number conversion
                no=100
                echo "obase=2;$no" | bc 
                1100100
                no=1100100
                echo "obase=10;ibase=2;$no" | bc
                100
- The following examples demonstrate calculating squares and square roots:
 
                echo "sqrt(100)" | bc #Square root
                echo "10^10" | bc #Square