1 cfa37a7b 2004-04-10 devnull .TH TEST 1
3 cfa37a7b 2004-04-10 devnull test \- set status according to condition
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
7 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
9 cfa37a7b 2004-04-10 devnull evaluates the expression
10 cfa37a7b 2004-04-10 devnull .IR expr .
11 cfa37a7b 2004-04-10 devnull If the value is true the exit status is null; otherwise the
12 cfa37a7b 2004-04-10 devnull exit status is non-null.
13 cfa37a7b 2004-04-10 devnull If there are no arguments the exit status is non-null.
15 cfa37a7b 2004-04-10 devnull The following primitives are used to construct
16 cfa37a7b 2004-04-10 devnull .IR expr .
17 cfa37a7b 2004-04-10 devnull .TP "\w'\fIn1 \fL-eq \fIn2\fLXX'u"
18 cfa37a7b 2004-04-10 devnull .BI -r " file"
19 cfa37a7b 2004-04-10 devnull True if the file exists (is accessible) and is readable.
22 cfa37a7b 2004-04-10 devnull .BI -w " file"
23 cfa37a7b 2004-04-10 devnull True if the file exists and is writable.
25 cfa37a7b 2004-04-10 devnull .BI -x " file"
26 cfa37a7b 2004-04-10 devnull True if the file exists and has execute permission.
28 cfa37a7b 2004-04-10 devnull .BI -e " file
29 cfa37a7b 2004-04-10 devnull True if the file exists.
31 cfa37a7b 2004-04-10 devnull .BI -f " file"
32 cfa37a7b 2004-04-10 devnull True if the file exists and is a plain file.
34 cfa37a7b 2004-04-10 devnull .BI -d " file"
35 cfa37a7b 2004-04-10 devnull True if the file exists and is a directory.
37 cfa37a7b 2004-04-10 devnull .BI -s " file"
38 cfa37a7b 2004-04-10 devnull True if the file exists and has a size greater than zero.
40 cfa37a7b 2004-04-10 devnull .BI -t " fildes
41 cfa37a7b 2004-04-10 devnull True if the open file whose file descriptor number is
42 cfa37a7b 2004-04-10 devnull .I fildes
43 cfa37a7b 2004-04-10 devnull (1 by default)
44 cfa37a7b 2004-04-10 devnull is the same file as
45 cfa37a7b 2004-04-10 devnull .BR /dev/cons .
47 cfa37a7b 2004-04-10 devnull .BI -A " file"
48 cfa37a7b 2004-04-10 devnull True if the file exists and is append-only.
50 cfa37a7b 2004-04-10 devnull .BI -L " file"
51 cfa37a7b 2004-04-10 devnull True if the file exists and is exclusive-use.
53 cfa37a7b 2004-04-10 devnull .BI -T "file"
54 cfa37a7b 2004-04-10 devnull True if the file exists and is temporary.
56 cfa37a7b 2004-04-10 devnull .IB s1 " = " s2
58 cfa37a7b 2004-04-10 devnull if the strings
62 cfa37a7b 2004-04-10 devnull are identical.
64 cfa37a7b 2004-04-10 devnull .IB s1 " != " s2
66 cfa37a7b 2004-04-10 devnull if the strings
70 cfa37a7b 2004-04-10 devnull are not identical.
75 cfa37a7b 2004-04-10 devnull is not the null string.
76 cfa37a7b 2004-04-10 devnull (Deprecated.)
78 cfa37a7b 2004-04-10 devnull .BI -n " s1"
79 cfa37a7b 2004-04-10 devnull True if the length of string
81 cfa37a7b 2004-04-10 devnull is non-zero.
83 cfa37a7b 2004-04-10 devnull .BI -z " s1"
84 cfa37a7b 2004-04-10 devnull True if the length of string
88 cfa37a7b 2004-04-10 devnull .IB n1 " -eq " n2
89 cfa37a7b 2004-04-10 devnull True if the integers
93 cfa37a7b 2004-04-10 devnull are arithmetically equal.
94 cfa37a7b 2004-04-10 devnull Any of the comparisons
95 cfa37a7b 2004-04-10 devnull .BR -ne ,
96 cfa37a7b 2004-04-10 devnull .BR -gt ,
97 cfa37a7b 2004-04-10 devnull .BR -ge ,
98 cfa37a7b 2004-04-10 devnull .BR -lt ,
101 cfa37a7b 2004-04-10 devnull may be used in place of
102 cfa37a7b 2004-04-10 devnull .BR -eq .
103 cfa37a7b 2004-04-10 devnull The (nonstandard) construct
104 cfa37a7b 2004-04-10 devnull .BI -l " string\f1,
105 cfa37a7b 2004-04-10 devnull meaning the length of
106 cfa37a7b 2004-04-10 devnull .IR string ,
107 cfa37a7b 2004-04-10 devnull may be used in place of an integer.
109 cfa37a7b 2004-04-10 devnull .IB a " -nt " b
110 cfa37a7b 2004-04-10 devnull True if file
112 cfa37a7b 2004-04-10 devnull is newer than (modified after) file
115 cfa37a7b 2004-04-10 devnull .IB a " -ot " b
116 cfa37a7b 2004-04-10 devnull True if file
118 cfa37a7b 2004-04-10 devnull is older than (modified before) file
121 cfa37a7b 2004-04-10 devnull .IB f " -older " t
122 cfa37a7b 2004-04-10 devnull True if file
124 cfa37a7b 2004-04-10 devnull is older than (modified before) time
128 cfa37a7b 2004-04-10 devnull is a integer followed by the letters
129 cfa37a7b 2004-04-10 devnull .BR y (years),
130 cfa37a7b 2004-04-10 devnull .BR M (months),
131 cfa37a7b 2004-04-10 devnull .BR d (days),
132 cfa37a7b 2004-04-10 devnull .BR h (hours),
133 cfa37a7b 2004-04-10 devnull .BR m (minutes),
135 cfa37a7b 2004-04-10 devnull .BR s (seconds),
136 cfa37a7b 2004-04-10 devnull it represents current time minus the specified time.
137 cfa37a7b 2004-04-10 devnull If there is no letter, it represents seconds since
139 cfa37a7b 2004-04-10 devnull You can also concatenate mixed units. For example,
140 cfa37a7b 2004-04-10 devnull .B 3d12h
141 cfa37a7b 2004-04-10 devnull means three days and twelve hours ago.
144 cfa37a7b 2004-04-10 devnull These primaries may be combined with the
145 cfa37a7b 2004-04-10 devnull following operators:
146 cfa37a7b 2004-04-10 devnull .TP "\w'\fL( \fIexpr\fL )XX'u"
148 cfa37a7b 2004-04-10 devnull unary negation operator
154 cfa37a7b 2004-04-10 devnull operator
159 cfa37a7b 2004-04-10 devnull operator; higher precedence than
162 cfa37a7b 2004-04-10 devnull .BI "( " expr " )"
163 cfa37a7b 2004-04-10 devnull parentheses for grouping.
166 cfa37a7b 2004-04-10 devnull The primitives
167 cfa37a7b 2004-04-10 devnull .BR -b ,
168 cfa37a7b 2004-04-10 devnull .BR -u ,
169 cfa37a7b 2004-04-10 devnull .BR -g ,
172 cfa37a7b 2004-04-10 devnull return false; they are recognized for compatibility with POSIX.
174 cfa37a7b 2004-04-10 devnull Notice that all the operators and flags are separate
175 cfa37a7b 2004-04-10 devnull arguments to
176 cfa37a7b 2004-04-10 devnull .IR test .
177 cfa37a7b 2004-04-10 devnull Notice also that parentheses and equal signs are meaningful
180 cfa37a7b 2004-04-10 devnull and must be enclosed in quotes.
181 cfa37a7b 2004-04-10 devnull .SH EXAMPLES
183 cfa37a7b 2004-04-10 devnull is a dubious way to check for specific character strings:
184 cfa37a7b 2004-04-10 devnull it uses a process to do what an
185 cfa37a7b 2004-04-10 devnull .IR rc (1)
186 cfa37a7b 2004-04-10 devnull match or switch statement can do.
187 cfa37a7b 2004-04-10 devnull The first example is not only inefficient but wrong, because
189 cfa37a7b 2004-04-10 devnull understands the purported string
190 cfa37a7b 2004-04-10 devnull .B \&"-c"
191 cfa37a7b 2004-04-10 devnull as an option.
194 cfa37a7b 2004-04-10 devnull if (test $1 '=' "-c") echo OK # wrong!
197 cfa37a7b 2004-04-10 devnull A better way is
200 cfa37a7b 2004-04-10 devnull if (~ $1 -c) echo OK
203 cfa37a7b 2004-04-10 devnull Test whether
205 cfa37a7b 2004-04-10 devnull is in the current directory.
207 cfa37a7b 2004-04-10 devnull .B test -f abc -o -d abc
208 cfa37a7b 2004-04-10 devnull .SH SOURCE
209 c3674de4 2005-01-11 devnull .B \*9/src/cmd/test.c
210 cfa37a7b 2004-04-10 devnull .SH "SEE ALSO"
211 cfa37a7b 2004-04-10 devnull .IR rc (1)
213 f6d2cbfe 2011-08-16 rsc Won't complain about extraneous arguments
214 f6d2cbfe 2011-08-16 rsc since there may be arguments left unprocessed by
215 f6d2cbfe 2011-08-16 rsc short-circuit evaluation of