This section describes commands that are primarily useful for their exit
status, rather than their output. Thus, they are often used as the
condition of shell if
statements, or as the last command in a
pipeline.
false
: Do nothing, unsuccessfully
false
does nothing except return an exit status of 1, meaning
failure. It can be used as a place holder in shell scripts
where an unsuccessful command is needed.
Any arguments are ignored, except for a lone `--help' or `--version' (see section Common options).
true
: Do nothing, successfully
true
does nothing except return an exit status of 0, meaning
success. It can be used as a place holder in shell scripts
where a successful command is needed, although the shell built-in
command :
(colon) may be faster.
Any arguments are ignored, except for a lone `--help' or `--version' (see section Common options).
test
: Check file types and compare values
test
returns a status of 0 (true) or 1 (false) depending on the
evaluation of the conditional expression expr. Each part of the
expression must be a separate argument.
test
has file status checks, string operators, and numeric
comparison operators.
Because most shells have a built-in command by the same name, using the unadorned command name in a script or interactively may get you different functionality than that described here.
Besides the options below, test
accepts a lone `--help' or
`--version'. See section Common options. A single non-option argument
is also allowed: test
returns true if the argument is not null.
These options test for particular types of files. (Everything's a file, but not all files are the same!)
These options test for particular access permissions.
These options test other file characteristics.
These options test string characteristics. Strings are not quoted for
test
, though you may need to quote them to protect characters
with special meaning to the shell, e.g., spaces.
Numeric relationals. The arguments must be entirely numeric (possibly
negative), or the special expression -l string
, which
evaluates to the length of string.
For example:
test -1 -gt -2 && echo yes => yes test -l abc -gt 1 && echo yes => yes test 0x100 -eq 1 error--> test: integer expression expected before -eq
test
The usual logical connectives.
expr
: Evaluate expressions
expr
evaluates an expression and writes the result on standard
output. Each token of the expression must be a separate argument.
Operands are either numbers or strings. expr
coerces
anything appearing in an operand position to an integer or a string
depending on the operation being applied to it.
Strings are not quoted for expr
, though you may need to quote
them to protect characters with special meaning to the shell, e.g.,
spaces.
Operators may given as infix symbols or prefix keywords. Parentheses may be used for grouping in the usual manner (you must quote parentheses to avoid the shell evaluating them, however).
0 if the expression is neither null nor 0, 1 if the expression is null or 0, 2 for invalid expressions.
expr
The usual logical connectives and relations, in order of precedence.
==
is a synonym for =
. expr
first tries to coerce
both arguments to numbers and do a numeric comparison; if either
coercion fails, it does a lexicographic comparison.
Numeric operators, in order of increasing precedence. The connectives (previous section) have higher precedence, the string operators (following section) have lower.
String operators. These have lowest precedence.
grep
) regular
expression, with a ^
implicitly prepended. The first argument is
then matched against this regular expression.
If the match succeeds and regex uses `\(' and `\)', the
:
expression returns the part of string that matched the
subexpression; otherwise, it returns the number of characters matched.
If the match fails, the :
operator returns the null string if
`\(' and `\)' are used in regex, otherwise 0.
Only the first `\( ... \)' pair is relevant to the return
value; additional pairs are meaningful only for grouping the regular
expression operators.
See section `Regular Expression Library' in Regex, for details of
regular expression syntax.
The keywords cannot be used as strings.
expr
Here are a few examples, including quoting for shell metacharacters.
To add 1 to the shell variable foo
, in Bourne-compatible shells:
foo=`expr $foo + 1`
To print the non-directory part of the file name stored in
$fname
, which need not contain a /
.
expr $fname : '.*/\(^.*\)' '^|' $fname
expr abc : 'a\(.\)c' => b expr index abcdef cz => 3 expr index index a error--> expr: syntax error