Blame


1 cfa37a7b 2004-04-10 devnull .TH TEST 1
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull test \- set status according to condition
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B test
6 cfa37a7b 2004-04-10 devnull .I expr
7 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
8 cfa37a7b 2004-04-10 devnull .I Test
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.
14 cfa37a7b 2004-04-10 devnull .PP
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.
20 cfa37a7b 2004-04-10 devnull .PD0
21 cfa37a7b 2004-04-10 devnull .TP
22 cfa37a7b 2004-04-10 devnull .BI -w " file"
23 cfa37a7b 2004-04-10 devnull True if the file exists and is writable.
24 cfa37a7b 2004-04-10 devnull .TP
25 cfa37a7b 2004-04-10 devnull .BI -x " file"
26 cfa37a7b 2004-04-10 devnull True if the file exists and has execute permission.
27 cfa37a7b 2004-04-10 devnull .TP
28 cfa37a7b 2004-04-10 devnull .BI -e " file
29 cfa37a7b 2004-04-10 devnull True if the file exists.
30 cfa37a7b 2004-04-10 devnull .TP
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.
33 cfa37a7b 2004-04-10 devnull .TP
34 cfa37a7b 2004-04-10 devnull .BI -d " file"
35 cfa37a7b 2004-04-10 devnull True if the file exists and is a directory.
36 cfa37a7b 2004-04-10 devnull .TP
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.
39 cfa37a7b 2004-04-10 devnull .TP
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 .
46 cfa37a7b 2004-04-10 devnull .TP
47 cfa37a7b 2004-04-10 devnull .BI -A " file"
48 cfa37a7b 2004-04-10 devnull True if the file exists and is append-only.
49 cfa37a7b 2004-04-10 devnull .TP
50 cfa37a7b 2004-04-10 devnull .BI -L " file"
51 cfa37a7b 2004-04-10 devnull True if the file exists and is exclusive-use.
52 cfa37a7b 2004-04-10 devnull .TP
53 cfa37a7b 2004-04-10 devnull .BI -T "file"
54 cfa37a7b 2004-04-10 devnull True if the file exists and is temporary.
55 cfa37a7b 2004-04-10 devnull .TP
56 cfa37a7b 2004-04-10 devnull .IB s1 " = " s2
57 cfa37a7b 2004-04-10 devnull True
58 cfa37a7b 2004-04-10 devnull if the strings
59 cfa37a7b 2004-04-10 devnull .I s1
60 cfa37a7b 2004-04-10 devnull and
61 cfa37a7b 2004-04-10 devnull .I s2
62 cfa37a7b 2004-04-10 devnull are identical.
63 cfa37a7b 2004-04-10 devnull .TP
64 cfa37a7b 2004-04-10 devnull .IB s1 " != " s2
65 cfa37a7b 2004-04-10 devnull True
66 cfa37a7b 2004-04-10 devnull if the strings
67 cfa37a7b 2004-04-10 devnull .I s1
68 cfa37a7b 2004-04-10 devnull and
69 cfa37a7b 2004-04-10 devnull .I s2
70 cfa37a7b 2004-04-10 devnull are not identical.
71 cfa37a7b 2004-04-10 devnull .TP
72 cfa37a7b 2004-04-10 devnull s1
73 cfa37a7b 2004-04-10 devnull True if
74 cfa37a7b 2004-04-10 devnull .I s1
75 cfa37a7b 2004-04-10 devnull is not the null string.
76 cfa37a7b 2004-04-10 devnull (Deprecated.)
77 cfa37a7b 2004-04-10 devnull .TP
78 cfa37a7b 2004-04-10 devnull .BI -n " s1"
79 cfa37a7b 2004-04-10 devnull True if the length of string
80 cfa37a7b 2004-04-10 devnull .I s1
81 cfa37a7b 2004-04-10 devnull is non-zero.
82 cfa37a7b 2004-04-10 devnull .TP
83 cfa37a7b 2004-04-10 devnull .BI -z " s1"
84 cfa37a7b 2004-04-10 devnull True if the length of string
85 cfa37a7b 2004-04-10 devnull .I s1
86 cfa37a7b 2004-04-10 devnull is zero.
87 cfa37a7b 2004-04-10 devnull .TP
88 cfa37a7b 2004-04-10 devnull .IB n1 " -eq " n2
89 cfa37a7b 2004-04-10 devnull True if the integers
90 cfa37a7b 2004-04-10 devnull .I n1
91 cfa37a7b 2004-04-10 devnull and
92 cfa37a7b 2004-04-10 devnull .I n2
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 ,
99 cfa37a7b 2004-04-10 devnull or
100 cfa37a7b 2004-04-10 devnull .BR -le
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.
108 cfa37a7b 2004-04-10 devnull .TP
109 cfa37a7b 2004-04-10 devnull .IB a " -nt " b
110 cfa37a7b 2004-04-10 devnull True if file
111 cfa37a7b 2004-04-10 devnull .I a
112 cfa37a7b 2004-04-10 devnull is newer than (modified after) file
113 cfa37a7b 2004-04-10 devnull .IR b .
114 cfa37a7b 2004-04-10 devnull .TP
115 cfa37a7b 2004-04-10 devnull .IB a " -ot " b
116 cfa37a7b 2004-04-10 devnull True if file
117 cfa37a7b 2004-04-10 devnull .I a
118 cfa37a7b 2004-04-10 devnull is older than (modified before) file
119 cfa37a7b 2004-04-10 devnull .IR b .
120 cfa37a7b 2004-04-10 devnull .TP
121 cfa37a7b 2004-04-10 devnull .IB f " -older " t
122 cfa37a7b 2004-04-10 devnull True if file
123 cfa37a7b 2004-04-10 devnull .I f
124 cfa37a7b 2004-04-10 devnull is older than (modified before) time
125 cfa37a7b 2004-04-10 devnull .IR t .
126 cfa37a7b 2004-04-10 devnull If
127 cfa37a7b 2004-04-10 devnull .I t
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),
134 cfa37a7b 2004-04-10 devnull or
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
138 cfa37a7b 2004-04-10 devnull epoch.
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.
142 cfa37a7b 2004-04-10 devnull .PD
143 cfa37a7b 2004-04-10 devnull .PP
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"
147 cfa37a7b 2004-04-10 devnull .B !
148 cfa37a7b 2004-04-10 devnull unary negation operator
149 cfa37a7b 2004-04-10 devnull .PD0
150 cfa37a7b 2004-04-10 devnull .TP
151 cfa37a7b 2004-04-10 devnull .B -o
152 cfa37a7b 2004-04-10 devnull binary
153 cfa37a7b 2004-04-10 devnull .I or
154 cfa37a7b 2004-04-10 devnull operator
155 cfa37a7b 2004-04-10 devnull .TP
156 cfa37a7b 2004-04-10 devnull .B -a
157 cfa37a7b 2004-04-10 devnull binary
158 cfa37a7b 2004-04-10 devnull .I and
159 cfa37a7b 2004-04-10 devnull operator; higher precedence than
160 cfa37a7b 2004-04-10 devnull .BR -o
161 cfa37a7b 2004-04-10 devnull .TP
162 cfa37a7b 2004-04-10 devnull .BI "( " expr " )"
163 cfa37a7b 2004-04-10 devnull parentheses for grouping.
164 cfa37a7b 2004-04-10 devnull .PD
165 cfa37a7b 2004-04-10 devnull .PP
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 ,
170 cfa37a7b 2004-04-10 devnull and
171 cfa37a7b 2004-04-10 devnull .BR -s
172 cfa37a7b 2004-04-10 devnull return false; they are recognized for compatibility with POSIX.
173 cfa37a7b 2004-04-10 devnull .PP
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
178 cfa37a7b 2004-04-10 devnull to
179 cfa37a7b 2004-04-10 devnull .I rc
180 cfa37a7b 2004-04-10 devnull and must be enclosed in quotes.
181 cfa37a7b 2004-04-10 devnull .SH EXAMPLES
182 cfa37a7b 2004-04-10 devnull .I Test
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 d32deab1 2020-08-16 rsc .MR 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
188 cfa37a7b 2004-04-10 devnull .I test
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.
192 cfa37a7b 2004-04-10 devnull .IP
193 cfa37a7b 2004-04-10 devnull .EX
194 cfa37a7b 2004-04-10 devnull if (test $1 '=' "-c") echo OK # wrong!
195 cfa37a7b 2004-04-10 devnull .EE
196 cfa37a7b 2004-04-10 devnull .LP
197 cfa37a7b 2004-04-10 devnull A better way is
198 cfa37a7b 2004-04-10 devnull .IP
199 cfa37a7b 2004-04-10 devnull .EX
200 cfa37a7b 2004-04-10 devnull if (~ $1 -c) echo OK
201 cfa37a7b 2004-04-10 devnull .EE
202 cfa37a7b 2004-04-10 devnull .PP
203 cfa37a7b 2004-04-10 devnull Test whether
204 cfa37a7b 2004-04-10 devnull .L abc
205 cfa37a7b 2004-04-10 devnull is in the current directory.
206 cfa37a7b 2004-04-10 devnull .IP
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)
212 f6d2cbfe 2011-08-16 rsc .SH BUGS
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
216 f6d2cbfe 2011-08-16 rsc .B -a
217 f6d2cbfe 2011-08-16 rsc or
218 f6d2cbfe 2011-08-16 rsc .BR -o .