| test.1 - 9base - revived minimalist port of Plan 9 userland to Unix | |
| git clone git://git.suckless.org/9base | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| test.1 (3534B) | |
| --- | |
| 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 \*9/src/cmd/test.c | |
| 210 .SH "SEE ALSO" | |
| 211 .IR rc (1) |