The following primitives are used to construct expr .
9n -r " file" true if the file exists and is readable.
-w " file" true if the file exists and is writable.
-f " file" true if the file exists and is not a directory.
-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 associated with a terminal device.
-z " s1" true if the length of string s1 is zero.
-n " s1" true if the length of the string s1 is nonzero.
s1 " = " s2 true if the strings s1 and s2 are equal.
s1 " != " s2 true if the strings s1 and s2 are not equal.
s1 true if s1 is not the null string.
n1 " -eq " n2 true if the integers n1 and n2 are algebraically equal. Any of the comparisons -ne , -gt , -ge , -lt , or -le may be used in place of -eq .
These primaries may be combined with the following operators:
! unary negation operator
-a binary and operator
-o binary or operator
"( " "expr" " )" parentheses for grouping.
-a has higher precedence than -o. Notice that all the operators and flags are separate arguments to test . Notice also that parentheses are meaningful to the Shell and must be escaped.