Beginners Guide to Arithmetic Operations on Bourne Shell Variables

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.