Blob


1 .TH TEST 1
2 .SH NAME
3 test \- set status according to condition
4 .SH SYNOPSIS
5 .B test
6 .I expr
7 .SH DESCRIPTION
8 .I Test
9 evaluates the expression
10 .IR expr .
11 If the value is true the exit status is null; otherwise the
12 exit status is non-null.
13 If there are no arguments the exit status is non-null.
14 .PP
15 The following primitives are used to construct
16 .IR expr .
17 .TP "\w'\fIn1 \fL-eq \fIn2\fLXX'u"
18 .BI -r " file"
19 True if the file exists (is accessible) and is readable.
20 .PD0
21 .TP
22 .BI -w " file"
23 True if the file exists and is writable.
24 .TP
25 .BI -x " file"
26 True if the file exists and has execute permission.
27 .TP
28 .BI -e " file
29 True if the file exists.
30 .TP
31 .BI -f " file"
32 True if the file exists and is a plain file.
33 .TP
34 .BI -d " file"
35 True if the file exists and is a directory.
36 .TP
37 .BI -s " file"
38 True if the file exists and has a size greater than zero.
39 .TP
40 .BI -t " fildes
41 True if the open file whose file descriptor number is
42 .I fildes
43 (1 by default)
44 is the same file as
45 .BR /dev/cons .
46 .TP
47 .BI -A " file"
48 True if the file exists and is append-only.
49 .TP
50 .BI -L " file"
51 True if the file exists and is exclusive-use.
52 .TP
53 .BI -T "file"
54 True if the file exists and is temporary.
55 .TP
56 .IB s1 " = " s2
57 True
58 if the strings
59 .I s1
60 and
61 .I s2
62 are identical.
63 .TP
64 .IB s1 " != " s2
65 True
66 if the strings
67 .I s1
68 and
69 .I s2
70 are not identical.
71 .TP
72 s1
73 True if
74 .I s1
75 is not the null string.
76 (Deprecated.)
77 .TP
78 .BI -n " s1"
79 True if the length of string
80 .I s1
81 is non-zero.
82 .TP
83 .BI -z " s1"
84 True if the length of string
85 .I s1
86 is zero.
87 .TP
88 .IB n1 " -eq " n2
89 True if the integers
90 .I n1
91 and
92 .I n2
93 are arithmetically equal.
94 Any of the comparisons
95 .BR -ne ,
96 .BR -gt ,
97 .BR -ge ,
98 .BR -lt ,
99 or
100 .BR -le
101 may be used in place of
102 .BR -eq .
103 The (nonstandard) construct
104 .BI -l " string\f1,
105 meaning the length of
106 .IR string ,
107 may be used in place of an integer.
108 .TP
109 .IB a " -nt " b
110 True if file
111 .I a
112 is newer than (modified after) file
113 .IR b .
114 .TP
115 .IB a " -ot " b
116 True if file
117 .I a
118 is older than (modified before) file
119 .IR b .
120 .TP
121 .IB f " -older " t
122 True if file
123 .I f
124 is older than (modified before) time
125 .IR t .
126 If
127 .I t
128 is a integer followed by the letters
129 .BR y (years),
130 .BR M (months),
131 .BR d (days),
132 .BR h (hours),
133 .BR m (minutes),
134 or
135 .BR s (seconds),
136 it represents current time minus the specified time.
137 If there is no letter, it represents seconds since
138 epoch.
139 You can also concatenate mixed units. For example,
140 .B 3d12h
141 means three days and twelve hours ago.
142 .PD
143 .PP
144 These primaries may be combined with the
145 following operators:
146 .TP "\w'\fL( \fIexpr\fL )XX'u"
147 .B !
148 unary negation operator
149 .PD0
150 .TP
151 .B -o
152 binary
153 .I or
154 operator
155 .TP
156 .B -a
157 binary
158 .I and
159 operator; higher precedence than
160 .BR -o
161 .TP
162 .BI "( " expr " )"
163 parentheses for grouping.
164 .PD
165 .PP
166 The primitives
167 .BR -b ,
168 .BR -u ,
169 .BR -g ,
170 and
171 .BR -s
172 return false; they are recognized for compatibility with POSIX.
173 .PP
174 Notice that all the operators and flags are separate
175 arguments to
176 .IR test .
177 Notice also that parentheses and equal signs are meaningful
178 to
179 .I rc
180 and must be enclosed in quotes.
181 .SH EXAMPLES
182 .I Test
183 is a dubious way to check for specific character strings:
184 it uses a process to do what an
185 .MR rc (1)
186 match or switch statement can do.
187 The first example is not only inefficient but wrong, because
188 .I test
189 understands the purported string
190 .B \&"-c"
191 as an option.
192 .IP
193 .EX
194 if (test $1 '=' "-c") echo OK # wrong!
195 .EE
196 .LP
197 A better way is
198 .IP
199 .EX
200 if (~ $1 -c) echo OK
201 .EE
202 .PP
203 Test whether
204 .L abc
205 is in the current directory.
206 .IP
207 .B test -f abc -o -d abc
208 .SH SOURCE
209 .B \*9/src/cmd/test.c
210 .SH "SEE ALSO"
211 .IR rc (1)
212 .SH BUGS
213 Won't complain about extraneous arguments
214 since there may be arguments left unprocessed by
215 short-circuit evaluation of
216 .B -a
217 or
218 .BR -o .