# Bash calculate and Arithmetic Operators When the shell encounters \$(( expression )), it evaluates expression and places the result on the command line; expression is an arithmetic expression. Besides the four basic arithmetic operations of addition, subtraction, multiplication, and division, its most used operator is % (modulo, the remainder after division).

```\$ sa "\$(( 1 + 12 ))" "\$(( 12 * 13 ))" "\$(( 16 / 4 ))" "\$(( 6 - 9 ))"

:13:

:156:

:4:

:-3:
```

The arithmetic operators (see Tables 4-1 and 4-2) take the same precedence that you learned in school (basically, that multiplication and division are performed before addition and subtraction), and they can be grouped with parentheses to change the order of evaluation:

```\$ sa "\$(( 3 + 4 * 5 ))" "\$(( (3 + 4) * 5 ))"

:23:

:35:
```

The modulo operator, %, returns the remainder after division:

```\$ sa "\$(( 13 % 5 ))"

:3:
```

Converting seconds (which is how Unix systems store times) to days, hours, minutes, and seconds involves division and the modulo operator, as shown in Listing 1.

Listing 1. secs2dhms, Convert Seconds (in Argument \$1) to Days, Hours, Minutes, and Seconds

```secs_in_day=86400
secs_in_hour=3600
mins_in_hour=60
secs_in_min=60

days=\$(( \$1 / \$secs_in_day ))

secs=\$(( \$1 % \$secs_in_day ))

printf "%d:%02d:%02d:%02d\n" "\$days" "\$((\$secs / \$secs_in_hour))" \

"\$(((\$secs / \$mins_in_hour) %\$mins_in_hour))" "\$((\$secs % \$secs_in_min))"
```

If not enclosed in double quotes, the results of arithmetic expansion are subject to word splitting.

```Operator     Description

- +            Unary minus and plus

! ~            Logical and bitwise negation

* /    %        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

= *= /= %= += -= <<= >>= &= ^= |=     Assignment

**            Exponentiation

id++ id--        Variable post-increment and post-decrement

++id –-id        Variable pre-increment and pre-decrement

expr ? expr1 : expr2     Conditional operator

expr1 , expr2         Comma
```

In case of any ©Copyright or missing credits issue please check CopyRights page for faster resolutions.

This site uses Akismet to reduce spam. Learn how your comment data is processed.