test
condition
or
[
condition
]
Evaluate a
condition
and, if its value is true, return a zero
exit status; otherwise, return a non-zero exit status.
An alternate form of the command uses
[ ]
rather than the word
test
. The Korn shell allows an additional form,
[[ ]]
.
condition
is constructed using the expressions below. Conditions
are true if the description holds true. Features that are
Korn-shell-specific are marked with a (K).
-
-a
file
-
file
exists. (K)
-
-b
file
-
file
exists and is a block special file.
-
-c
file
-
file
exists and is a character special file.
-
-d
file
-
file
exists and is a directory.
-
-f
file
-
file
exists and is a regular file.
-
-G
file
-
file
exists and its group is the effective group ID. (K)
-
-g
file
-
file
exists and its set-group-id bit is set.
-
-k
file
-
file
exists and its sticky bit is set.
-
-L
file
-
file
exists and is a symbolic link. (K)
-
-O
file
-
file
exists and its owner is the effective user ID. (K)
-
-o
c
-
Option
c
is on. (K)
-
-p
file
-
file
exists and is a named pipe (fifo).
-
-r
file
-
file
exists and is readable.
-
-S
file
-
file
exists and is a socket. (K)
-
-s
file
-
file
exists and has a size greater than zero.
-
-t [
n
]
-
The open file descriptor
n
is associated with a terminal device;
default
n
is 1.
-
-u
file
-
file
exists and its set-user-id bit is set.
-
-w
file
-
file
exists and is writable.
-
-x
file
-
file
exists and is executable.
-
f1
-ef
f2
-
Files
f1
and
f2
are linked (refer to same file). (K)
-
f1
-nt
f2
-
File
f1
is newer than
f2
. (K)
-
f1
-ot
f2
-
File
f1
is older than
f2
. (K)
-
-n
s1
-
String
s1
has non-zero length.
-
-z
s1
-
String
s1
has zero length.
-
s1
=
s2
-
Strings
s1
and
s2
are identical.
In the Korn shell,
s2
can be a regular expression.
-
s1
!=
s2
-
Strings
s1
and
s2
are
not
identical.
In the Korn shell,
s2
can be a regular expression.
-
s1
<
s2
-
ASCII value of
s1
precedes that of
s2
.
(Valid only within
[[ ]]
construct). (K)
-
s1
>
s2
-
ASCII value of
s1
follows that of
s2
.
(Valid only within
[[ ]]
construct). (K)
-
string
-
string
is not null.
-
n1
-eq
n2
-
n1
equals
n2
.
-
n1
-ge
n2
-
n1
is greater than or equal to
n2
.
-
n1
-gt
n2
-
n1
is greater than
n2
.
-
n1
-le
n2
-
n1
is less than or equal to
n2
.
-
n1
-lt
n2
-
n1
is less than
n2
.
-
n1
-ne
n2
-
n1
does not equal
n2
.
-
(
condition
)
-
True if
condition
is true (used for grouping).
The
( )
's should be preceded by a
\
.
-
"!
-
True if
condition
is false.
-
"
condition1
-
True if both conditions are true.
-
condition1
-
True if both conditions are true.
(Valid only within
[[ ]]
construct.) (K)
-
condition1
-
True if either condition is true.
-
condition1
-
True if either condition is true.
(Valid only within
[[ ]]
construct.) (K)
Each example below shows the first line of various statements
that might use a test condition:
while test $# -gt 0
While there are arguments ...
while [ -n "$1" ]
While there are nonempty arguments ...
if [ $count -lt 10 ]
If
$count
is less than 10 ...
if [ -d RCS ]
If the RCS directory exists ...
if [ "$answer" != "y" ]
If the answer is not
y
...
if [ ! -r "$1" -o ! -f "$1" ]
If the first argument is not a
readable file or a regular file ...