NAME
test - Evaluates conditional expressions
SYNOPSIS
test expression
[ expression ]
DESCRIPTION
The test command evaluates an expression constructed of
functions and operators. If the value of expression is
true, test returns an exit value of 0 (zero); otherwise, it
returns a nonzero (false) exit value. The test command also
returns a nonzero exit value if there are no arguments.
The alternate form of the command surrounds expression with
[ ] (brackets). When you use this form, you must surround
the brackets with spaces.
The test Expressions
All of the listed functions and operators are separate argu-
ments to test.
The following functions are used to construct expression:
-e file
TRUE if file exists.
-r file
TRUE if file exists and has read permission.
-w file
TRUE if file exists and has write permission.
-x file
TRUE if file exists and has execute permission.
-f file
TRUE if file exists and is a regular file.
-d file
TRUE if file exists and is a directory.
-c file
TRUE if file exists and is a character-special file.
-b file
TRUE if file exists and is a block-special file.
-p file
TRUE if file exists and is a named pipe (FIFO).
-u file
TRUE if file exists and its set-user ID bit is set.
-g file
TRUE if file exists and its set-group ID bit is set.
-k file
TRUE if file exists and its sticky bit is set.
-s file
TRUE if file exists and has a size greater than 0
(zero).
-t [file_descriptor]
TRUE if the open file with file descriptor number
file_descriptor (1 by default) is associated with a ter-
minal device.
-z string1
TRUE if the length of string1 is 0 (zero).
-n string1
TRUE if the length of string1 is nonzero.
string1 = string2
TRUE if string1 and string2 are identical.
string1 != string2
TRUE if string1 and string2 are not identical.
string1
TRUE if string1 is not the null string.
number1 -eq number2
TRUE if the integers number1 and number2 are algebrai-
cally equal. Any of the comparisons -ne, -gt, -ge, -lt,
and -le can be used in place of -eq.
The listed functions can be combined with the following
operators:
! Unary negation operator.
-a Binary AND operator.
-o Binary OR operator (-a has higher precedence than -o).
\( expression \)
Parentheses for grouping. There must be a space after
\( and before \).
EXAMPLES
1. To test whether a file exists and is not empty, enter:
if test -s "$1"
then
echo $1 does not exist or is empty.
fi
If the file specified by the first positional parameter
to the shell procedure does not exist, this displays an
error message. If $1 exists, it displays nothing.
Note that there must be a space between -s and the
filename.
The double quotes around $1 ensure that the test will
work properly even if the value of $1 is the empty
string. If the double quotes are omitted and $1 is the
empty string, test displays the error message test:
parameter expected.
2. To do a complex comparison, enter:
if [ $# -lt 2 -o ! -s "$1" ]
then
exit
fi
If the shell procedure was given fewer than two posi-
tional parameters or the file specified by $1 does not
exist, then this exits the shell procedure. The spe-
cial shell variable $# represents the number of posi-
tional parameters entered on the command line that
started this shell procedure.
Note that there must be a space before and after the [
character and before the ] character. There must also
be a space before the -lt flag and before the -s flag.
EXIT VALUES
The test command evaluates expression and, if its value is
TRUE, returns an exit value of 0 (zero); otherwise, it
returns a nonzero (FALSE) exit value; the test command also
returns a nonzero exit value if there are no arguments.
RELATED INFORMATION
Commands: csh(1), find(1), ksh(1), sh(1).
Acknowledgement and Disclaimer