.. SPDX-License-Identifier: GPL-2.0-or-later .. index:: single: test (command) test command ============ Synopsis -------- :: test test test test ! test -o test -a test -e test =~ 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 ````. 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 :doc:`setexpr`.