xref: /plan9-contrib/sys/man/1/test (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
TEST 1
NAME
test - set status according to condition
SYNOPSIS
test expr
DESCRIPTION
Test evaluates the expression expr . If the value is true the exit status is null; otherwise the exit status is non-null. If there are no arguments the exit status is non-null.

The following primitives are used to construct expr .

"\w'n1 \fL-eq n2\fLXX'u" -r " file" True if the file exists (is accessible) and is readable.

0

-w " file" True if the file exists and is writable.

-x " file" True if the file exists and has execute permission.

-e " file True if the file exists.

-f " file" True if the file exists and is a plain file.

-d " file" True if the file exists and is a directory.

-s " file" True if the file exists and has a size greater than zero.

-t " fildes True if the open file whose file descriptor number is fildes (1 by default) is the same file as /dev/cons .

s1 " = " s2 True if the strings s1 and s2 are identical.

s1 " != " s2 True if the strings s1 and s2 are not identical.

s1 True if s1 is not the null string. (Deprecated.)

-n " s1" True if the length of string s1 is non-zero.

-z " s1" True if the length of string s1 is zero.

n1 " -eq " n2 True if the integers n1 and n2 are arithmetically equal. Any of the comparisons -ne , -gt , -ge , -lt , or -le may be used in place of -eq . The (nonstandard) construct -l " string\f1, meaning the length of string , may be used in place of an integer.

These primaries may be combined with the following operators:

"\w'\fL( expr\fL )XX'u" ! unary negation operator

0

-o binary or operator

-a binary and operator; higher precedence than -o

"( " expr " )" parentheses for grouping.

The primitives -b , -u , -g , and -s return false; they are recognized for compatibility with POSIX.

Notice that all the operators and flags are separate arguments to test . Notice also that parentheses and equal signs are meaningful to rc and must be enclosed in quotes.

EXAMPLES
Test is a dubious way to check for specific character strings: it uses a process to do what an rc (1) match or switch statement can do. The first example is not only inefficient but wrong, because test understands the purported string "-c" as an option.
.EX if (test $1 '=' "-c") echo OK # wrong!

A better way is

.EX if (~ $1 -c) echo OK

Test whether .L abc is in the current directory.

test -f abc -o -d abc
SOURCE
/sys/src/cmd/test.c
"SEE ALSO"
rc (1)