diff options
Diffstat (limited to 'man/1/sh-expr')
| -rw-r--r-- | man/1/sh-expr | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/man/1/sh-expr b/man/1/sh-expr new file mode 100644 index 00000000..b640e339 --- /dev/null +++ b/man/1/sh-expr @@ -0,0 +1,157 @@ +.TH SH-EXPR 1 +.SH NAME +expr, ntest \- shell module for simple arithmetic. +.SH SYNOPSIS +.B load expr + +.B ${expr +[ +-r +.I radix +] +[ +.I arg... +] +.B } +.br +.B ntest +.I num +.br +.SH DESCRIPTION +.B Expr +is a loadable module for +.IR sh (1) +that provides support for simple integer arithmetic. +It provides one command, +.BR ntest , +which performs a simple boolean test +on its integer argument, and the +substitution operator +.BR expr , +which takes an expression in Reverse Polish +notation, and yields its result. +.B Ntest +returns true if its argument +.I num +is non-zero. +.B Expr +evaluates each +.I arg +in turn; if it is an integer it gets pushed onto +the stack; otherwise it should name +one of the operators below, whereupon +the appropriate number of operands are +popped off the stack, evaluated as arguments +to the operator, and the result pushed back onto +the stack. Arguments are passed to the operator +first-pushed first, so, for instance, +.B ${expr 2 1 -} +yields 1, not -1. +Alternative names are given for some operators; +this is to avoid the necessity of quoting operators +that contain +.I sh +metacharacters. All operations use 64-bit signed +integers; integers are given in the same form acceptable +to Limbo. The relational operators yield either +1 (true) or 0 (false). If the +.B -r +option is given, +.I radix +specifies an output base for numbers yielded by +.BR expr . +Numbers are printed in a form suitable for re-interpretation +by +.BR expr . +.PP +When all its arguments have been evaluated, +.B expr +yields all the values remaining on its stack, first pushed +first. The operators supported by expr are as follows (the number +of operands required in is given parentheses): +.TP 15 +.BR + \ (2) +Addition +.TP +.BR - \ (2) +Subtraction +.TP +.BR x ,\ * \ (2) +Multiplication +.TP +.BR / \ (2) +Division. Division by zero raises a +.B divide by zero +exception. +.TP +.BR % \ (2) +Modulus. A zero modulus will cause a +.B divide by zero +exception to be raised. +.TP +.BR and \ (2) +Bitwise-and. +.TP +.BR or \ (2) +Bitwise-or. +.TP +.BR xor \ (2) +Bitwise-xor. +.TP +.BR ~ \ (1) +Bitwise-complement.. +.TP +.BR _ \ (1) +Unary minus. +.TP +.BR << ,\ shl \ (2) +Shift left. +.TP +.BR >> ,\ shr \ (2) +Shift right. +.TP +.BR = ", " == ", " eq " (2)" +Equality. +.TP +.BR != ", " neq " (2)" +Inequality. +.TP +.BR > ", " gt " (2)" +Greater than. +.TP +.BR < ", " lt " (2)" +Less than. +.TP +.BR <= ", " le " (2)" +Less than or equal to. +.TP +.BR >= ", " ge " (2)" +Greater than or equal to. +.TP +.BR ! ", " not " (1)" +Logical negation. +.TP +.BI rep \ \f1(\fPn\f1)\fP +.B Rep +repeats the last operation (which must +have been a two-operand operation other +than +.BR seq ) +until the values in the stack are exhausted. +.TP +.BR seq \ (2) +.B Seq +pushes on the stack a sequence of numbers ranging +numerically from its first argument up to and including +its second argument. If its second argument is +less than its first, the sequence will descend. +.SH SOURCE +.B /appl/cmd/sh/expr.b +.SH SEE ALSO +.IR sh (1), +.IR sh-std (1), +.IR sh-tk (1) +.SH BUGS +Postfix notation can be confusing. +Any operators that contain shell metacharacters (e.g. ``*'', ``>'') +must be quoted to avoid interpretation by the shell. |
