Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
.IR 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 /sys/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 .