test command
Synopsis
test <str-op> <s>
test <s1> <str-cmp> <s2>
test <n1> <num-cmp> <n2>
test ! <expr>
test <expr1> -o <expr2>
test <expr1> -a <expr2>
test -e <interface> <dev[:part]> <path>
test <s> =~ <re>
Description
The test command is similar to the ordinary shell built-in by the
same name. Unlike in ordinary shells, it cannot be spelled [.
Strings
The string tests -n and -z, and string comparison operators
=, !=, < and >, work exactly as in ordinary shells.
Numbers
The number comparison operators -lt, -le, -gt, -gt,
-eq and -ne work as in ordinary shells.
Note
Numbers are parsed with simple_strtol(, 0), meaning that they
are treated as decimal unless there is a 0x prefix, any errors in
parsing are ignored, and parsing stops as soon as a non-digit (for
the selected base) is encountered. And most U-Boot commands that
generate “numeric” environment variables store them as hexadecimal
without a 0x prefix.
For example, this is not a correct way of testing whether a given file has a size less than 4KiB:
# Assuming readme.txt exists, sets 'filesize' environment variable
$ size mmc 0:1 readme.txt
$ if test "$filesize" -lt 4096 ; then ...
If the file size is actually 8000 (decimal), its hexadecimal
representation, and thus the value of $filesize, is 1f40, so
the comparison that is done ends up being “1 < 4096”.
Logic
The ! operator negates the sense of the test of the expression
<expr>.
The -o and -a operators perform logical OR and logical AND,
respectively, of the two expressions.
File existence
Like ordinary shells, the -e operator can be used to test for
existence of a file. However, the U-Boot version takes three
arguments:
The interface (e.g.
mmc).The device number, possibly including a partition specification.
The usual path argument, which is interpreted relative to the root of the filesystem.
Regular expressions
When CONFIG_REGEX is enabled, an additional operator =~ is
available. This is similar to the same operator available with bash’s
extended test command [[ ]]. The left operand is a string which is
matched against the regular expression described by the right operand.
The regular expression engine supports these features:
Anchoring
^and$, matching at the beginning/end of the string.Matching any single character (including whitespace) using
..Character classes
[ ], including ranges[0-9]and negation[^ /.].Grouping
( ).Alternation
|.Postfix qualifiers
*,+and?and their non-greedy variants*?,+?and??
For extracting the parts matching a capture group and/or performing substitutions, including back references, see setexpr command.