]>
Commit | Line | Data |
---|---|---|
726f6388 JA |
1 | This file is test.def, from which is created test.c. |
2 | It implements the builtin "test" in Bash. | |
3 | ||
a0c0a00f | 4 | Copyright (C) 1987-2015 Free Software Foundation, Inc. |
726f6388 JA |
5 | |
6 | This file is part of GNU Bash, the Bourne Again SHell. | |
7 | ||
3185942a JA |
8 | Bash is free software: you can redistribute it and/or modify |
9 | it under the terms of the GNU General Public License as published by | |
10 | the Free Software Foundation, either version 3 of the License, or | |
11 | (at your option) any later version. | |
726f6388 | 12 | |
3185942a JA |
13 | Bash is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | GNU General Public License for more details. | |
726f6388 | 17 | |
3185942a JA |
18 | You should have received a copy of the GNU General Public License |
19 | along with Bash. If not, see <http://www.gnu.org/licenses/>. | |
726f6388 JA |
20 | |
21 | $PRODUCES test.c | |
22 | ||
23 | $BUILTIN test | |
24 | $FUNCTION test_builtin | |
25 | $SHORT_DOC test [expr] | |
3185942a JA |
26 | Evaluate conditional expression. |
27 | ||
7117c2d2 | 28 | Exits with a status of 0 (true) or 1 (false) depending on |
726f6388 JA |
29 | the evaluation of EXPR. Expressions may be unary or binary. Unary |
30 | expressions are often used to examine the status of a file. There | |
495aee44 CR |
31 | are string operators and numeric comparison operators as well. |
32 | ||
33 | The behavior of test depends on the number of arguments. Read the | |
34 | bash manual page for the complete specification. | |
726f6388 JA |
35 | |
36 | File operators: | |
37 | ||
3185942a JA |
38 | -a FILE True if file exists. |
39 | -b FILE True if file is block special. | |
40 | -c FILE True if file is character special. | |
41 | -d FILE True if file is a directory. | |
42 | -e FILE True if file exists. | |
43 | -f FILE True if file exists and is a regular file. | |
44 | -g FILE True if file is set-group-id. | |
45 | -h FILE True if file is a symbolic link. | |
46 | -L FILE True if file is a symbolic link. | |
47 | -k FILE True if file has its `sticky' bit set. | |
48 | -p FILE True if file is a named pipe. | |
49 | -r FILE True if file is readable by you. | |
50 | -s FILE True if file exists and is not empty. | |
51 | -S FILE True if file is a socket. | |
52 | -t FD True if FD is opened on a terminal. | |
53 | -u FILE True if the file is set-user-id. | |
54 | -w FILE True if the file is writable by you. | |
55 | -x FILE True if the file is executable by you. | |
56 | -O FILE True if the file is effectively owned by you. | |
57 | -G FILE True if the file is effectively owned by your group. | |
58 | -N FILE True if the file has been modified since it was last read. | |
726f6388 | 59 | |
cce855bc JA |
60 | FILE1 -nt FILE2 True if file1 is newer than file2 (according to |
61 | modification date). | |
726f6388 JA |
62 | |
63 | FILE1 -ot FILE2 True if file1 is older than file2. | |
64 | ||
65 | FILE1 -ef FILE2 True if file1 is a hard link to file2. | |
66 | ||
67 | String operators: | |
68 | ||
3185942a | 69 | -z STRING True if string is empty. |
726f6388 | 70 | |
3185942a JA |
71 | -n STRING |
72 | STRING True if string is not empty. | |
726f6388 | 73 | |
3185942a JA |
74 | STRING1 = STRING2 |
75 | True if the strings are equal. | |
76 | STRING1 != STRING2 | |
77 | True if the strings are not equal. | |
78 | STRING1 < STRING2 | |
79 | True if STRING1 sorts before STRING2 lexicographically. | |
80 | STRING1 > STRING2 | |
81 | True if STRING1 sorts after STRING2 lexicographically. | |
726f6388 JA |
82 | |
83 | Other operators: | |
84 | ||
3185942a | 85 | -o OPTION True if the shell option OPTION is enabled. |
a0c0a00f CR |
86 | -v VAR True if the shell variable VAR is set. |
87 | -R VAR True if the shell variable VAR is set and is a name | |
88 | reference. | |
3185942a JA |
89 | ! EXPR True if expr is false. |
90 | EXPR1 -a EXPR2 True if both expr1 AND expr2 are true. | |
91 | EXPR1 -o EXPR2 True if either expr1 OR expr2 is true. | |
726f6388 | 92 | |
3185942a JA |
93 | arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne, |
94 | -lt, -le, -gt, or -ge. | |
726f6388 JA |
95 | |
96 | Arithmetic binary operators return true if ARG1 is equal, not-equal, | |
97 | less-than, less-than-or-equal, greater-than, or greater-than-or-equal | |
98 | than ARG2. | |
3185942a JA |
99 | |
100 | Exit Status: | |
101 | Returns success if EXPR evaluates to true; fails if EXPR evaluates to | |
102 | false or an invalid argument is given. | |
726f6388 JA |
103 | $END |
104 | ||
105 | $BUILTIN [ | |
106 | $DOCNAME test_bracket | |
107 | $FUNCTION test_builtin | |
108 | $SHORT_DOC [ arg... ] | |
3185942a JA |
109 | Evaluate conditional expression. |
110 | ||
111 | This is a synonym for the "test" builtin, but the last argument must | |
112 | be a literal `]', to match the opening `['. | |
726f6388 JA |
113 | $END |
114 | ||
ccc6cda3 JA |
115 | #include <config.h> |
116 | ||
117 | #if defined (HAVE_UNISTD_H) | |
cce855bc JA |
118 | # ifdef _MINIX |
119 | # include <sys/types.h> | |
120 | # endif | |
ccc6cda3 JA |
121 | # include <unistd.h> |
122 | #endif | |
123 | ||
124 | #include "../bashansi.h" | |
3185942a | 125 | #include "../bashintl.h" |
726f6388 JA |
126 | |
127 | #include "../shell.h" | |
d233b485 | 128 | #include "../execute_cmd.h" |
cce855bc | 129 | #include "../test.h" |
ccc6cda3 JA |
130 | #include "common.h" |
131 | ||
726f6388 JA |
132 | /* TEST/[ builtin. */ |
133 | int | |
134 | test_builtin (list) | |
135 | WORD_LIST *list; | |
136 | { | |
137 | char **argv; | |
138 | int argc, result; | |
726f6388 JA |
139 | |
140 | /* We let Matthew Bradburn and Kevin Braunsdorf's code do the | |
141 | actual test command. So turn the list of args into an array | |
ccc6cda3 JA |
142 | of strings, since that is what their code wants. */ |
143 | if (list == 0) | |
726f6388 JA |
144 | { |
145 | if (this_command_name[0] == '[' && !this_command_name[1]) | |
b72432fd | 146 | { |
3185942a | 147 | builtin_error (_("missing `]'")); |
b72432fd JA |
148 | return (EX_BADUSAGE); |
149 | } | |
726f6388 JA |
150 | |
151 | return (EXECUTION_FAILURE); | |
152 | } | |
153 | ||
ccc6cda3 | 154 | argv = make_builtin_argv (list, &argc); |
726f6388 | 155 | result = test_command (argc, argv); |
ccc6cda3 JA |
156 | free ((char *)argv); |
157 | ||
726f6388 JA |
158 | return (result); |
159 | } |