ttest.1 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       ttest.1 (3680B)
       ---
            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 .