## 4.4. Arithmetic Expressions

The Korn shell's `let` command performs arithmetic. `ksh88` is restricted to integer arithmetic. `ksh93` can do floating-point arithmetic as well. The Korn shell provides a way to substitute arithmetic values (for use as command arguments or in variables); base conversion is also possible:

`$((` `expr` `))` | Use the value of the enclosed arithmetic expression.
`B``#`n | Interpret integer n in numeric base B. For example, `8#100` specifies the octal equivalent of decimal 64.

### 4.4.1. Operators

The Korn shell uses arithmetic operators from the C programming language; in decreasing order of precedence.

Operator | Description
--- | ---
`++ --` | Auto-increment and auto-decrement, both prefix and postfix. `ksh93` only.
`+` | Unary plus. `ksh93` only.
`-` | Unary minus.
`! ~` | Logical negation; binary inversion (one's complement).
`* / %` | Multiplication; division; modulus (remainder).
`+ -` | Addition; subtraction.
`<< >>` | Bitwise left shift; bitwise right shift.
`<= >=` | Less than or equal to; greater than or equal to.
`< >` | Less than; greater than.
`== !=` | Equality; inequality (both evaluated left to right).
`&` | Bitwise AND.
`^` | Bitwise exclusive OR.
`|` | Bitwise OR.
`&&` | Logical AND (short-circuit).
`||` | Logical OR (short-circuit).
`?:` | Inline conditional evaluation. `ksh93` only.
`*= /= %=` `= += -=` `<<= >>=` `&= ^= |=` | Assignment.
`,` | Sequential expression evaluation. `ksh93` only.

### 4.4.2. Built-in Mathematical Functions (ksh93 only)

`ksh93` provides access to the standard set of mathematical functions. They are called using C function call syntax.

Name | Function | Name | Function
--- | --- | --- | ---
`abs` | Absolute value | `log` | Natural logarithm
`acos` | Arc cosine | `sin` | Sine
`asin` | Arc sine | `sinh` | Hyperbolic sine
`cos` | Cosine | `sqrt` | Square root
`cosh` | Hyperbolic cosine | `tan` | Tangent
`exp` | Exponential function | `tanh` | Hyperbolic tangent
`int` | Integer part of floating-point number |  |

### 4.4.3. Examples

See the `let` command for more information and examples:

>     let "count=0" "i = i + 1"		Assign i and count
>     let "num % 2"			        Test for an even number
>     (( percent >= 0 && percent <= 100 ))	Test the range of a value

Copyright © 2003 O'Reilly & Associates. All rights reserved.