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)