The Bourne shell assigns string values to variables only in the assignment statement. The Bourne shell has no built-in ability to perform arithmetic. The external statement, expr, treat the variables as numbers and performs the arithmetic operation.

**NOTE:**The expr statement is space-sensitive and expects each operand and operator to be separated by white spaces.

The expr statement recognizes the operators shown in the table below.

Operator | Operation | Example |
---|---|---|

+ | Addition | num2=`expr “$num1” + 25` |

– | Subtraction | num3=`expr “$num1” – “$num2″` |

* | Multiplication | num3=`expr “$num1” \* “$num2″` |

/ | Division | num4=`expr “$num2” / “$num1″` |

% | Integer remainder | num5=`expr “$num1” % 3` |

**NOTE:**Precede a multiplication operator with a backslash because it is a shell metacharacter.

The Bourne shell has no built-in arithmetic capability.

$ num1=5 $ echo $num1 5 $ num2=$num1+10 $ echo $num2 5+10

The expr statement must have white space around operators and operands. The expr statement automatically sends the value to standard output:

$ echo $num1 5 $ expr $num1 + 7 12 $ expr $num1+7 5+7 $ echo $num1 5

The following shows the need for properly quoting the multiplication operator.

$ expr $num1 * 2 expr: syntax error $ expr "$num1 * 2" 5 * 2 $ expr $num1 \* 2 10

When performing arithmetic, an operation result is stored in a variable. This is accomplished in the Bourne shell by placing the expr statement on the right side of a variable assignment statement:

$ echo $num1 5 $ num2=‘expr $num1 + 25‘ $ echo $num2 30 $ num3=‘expr $num1 + $num2‘ $ echo $num3 35 $ num4=‘expr $num1 \* $num2‘ $ echo $num4 150 $ num5=‘expr $num2 / $num1‘ $ echo $num5 6 $ num6=‘expr $num1 % 3‘ $ echo $num6 2

## Arithmetic Precedence

- Expressions (operations) within parentheses are evaluated first. Use a single pair of parentheses around an expression to force it to be evaluated first.
- Multiplication (*) and division (% and /) have greater precedence than addition (+) and subtraction (-).
- Arithmetic expressions are evaluated from left to right.
- When there is the slightest doubt, use parentheses to force the evaluation order.