Quick Reference: expr

expr expr is a very handy tool in shell developing, since it provides the ability to evaluate a wide range of arithmetic, logical, and relational expressions. It evaluates its arguments as expressions and prints the result. expr is a standard UNIX utility; the GNU version is on the tutorial.

Here's the syntax. The [brackets] mean "optional"; don't type the brackets:

expr arg1 operator arg2 [ operator arg3 ]

Arguments and operators must be separated by spaces. In many cases, an argument is an integer, typed literally or represented by a shell variable. There are three types of operators: arithmetic, relational, and logical.

Exit status () values for expr are 0 if the expression evaluates non-zero and non-null, 1 if the expression evaluates to 0 or null, or 2 if the expression is invalid.

Examples

Division happens first; output is 10:

$ expr 5 + 10 / 2

Addition happens first; output is 7 (truncated from 7.5):

$ expr \( 5 + 10 \) / 2

Add 1 to variable i; this is how variables are incremented in Bourne shell scripts:

i=`expr "$i" + 1`

Output 1 (true) if variable a is the string "hello":

$ expr "$a" = hello

Output 1 (true) if variable b plus 5 equals 10 or more:

$ expr "$b" + 5 \>= 10

In the examples below, variable p is the string "version.100". This command returns the number of characters in p:

$ expr "$p" : '.*' Output is 11

Match all characters and print them:

$ expr "$p" : '\(.*\)' Output is "version.100"

Output the number of lowercase letters matched:

$ expr "$p" : '[a-z]*' Output is 7

Match a string of lowercase letters:

$ expr "$p" : '\([a-z]*\)' Output is \"version"

Truncate $x if it contains five or more characters; if not, just output $x. (Logical OR uses the second argument when the first one is 0 or null; i.e., when the match fails.)

$ expr "$x" : '\(.....\)' "$x"

- DG from Anonymous' UNIX tutorial (SVR4/Solaris)