SYNOPSIS
test expression
[ expression ]
[[ expression ]]
DESCRIPTION
The test command checks for various properties of files, strings and integers. It produces no output (except error messages) but returns the result of the test as the exit status; see DIAGNOSTICS for more information.
The command line includes a Boolean expression. The simplest expression is a string which is true if the string is non-empty (that is, has non-zero length). More complex expressions are composed of operators and operands, each of which is a separate argument (that is, surrounded by white space). The operators imply the number and type of their operands. The operators taking a file operand evaluate as false (without error) if the file does not exist.
The [ command
[ expression ]
is identical to the test command
The [[ command
[[ expression ]]
features some different operators than the test and [ commands.
- Note:
-
When the set
-o korn option is set and the TK_TEST_CHECK_FOR_EXTRA_ARGS environment variable is not set, test, [, and [[ behave as in the standard Korn Shell and quietly ignore any extra specified arguments beyond those required for the specified operator. When set-o korn is not set, such extra arguments result in an error.
Operators
test, [, and [[ accept the following operators:
-b file-
true if the file is a block special file
-c file-
true if the file is a character special file
-d file-
true if the file is a directory
-e file-
true if the file exists
-f file-
true if the file is an ordinary file
-g file-
true if the setgid attribute of the file is on under UNIX (or the system attribute on Windows systems)
-h file-
true if file is a symbolic link
-k file-
true if the save text attribute of the file is on under UNIX (or the archive attribute on Windows systems)
-L file-
true if file is a symbolic link
-n string-
true if the length of string is greater than zero
-p file-
true if the file is a FIFO (named pipe)
-r file-
true if the file is readable
-s file-
true if the size of the file is non-zero
-t fd-
true if the numeric file descriptor fd is open and associated with a terminal
-u file-
true if the setuid attribute of the file is on under UNIX (or the hidden attribute on Windows systems)
-w file-
true if the file is writable
-x file-
true if the file is executable. If the specified file does not exist, test checks each extension in the PATHEXT environment variable (in the order listed) to see if a file exists with the specified name plus that extension. If such a file does exist and it is executable,
-x returns true. -z string-
true if the length of the string is zero
- number1
-eq number2 -
true if number1 and number2 are equal
Both number1 and number2 must be integers
- number1
-ge number2 -
true if number1 is greater than or equal to number2
- number
-gt number -
true if number1 is greater than number2
- number1
-le number2 -
true if the first number1 is less than or equal to number2
- number1
-lt number2 -
true if number1 is less than number2
- number1
-ne number2 -
true if number1 is not equal to number2
- file1
-nt file2 -
true if file1 is newer than file2
- Note:
-
All existing files are considered to be newer than a nonexistent file. In turn, no nonexistent file is newer than any existing file. Two nonexistent files are considered the same age.
- file1
-ot file2 -
true if file1 is older than file2
- Note:
-
A nonexistent file is considered to be older than any existing file. In turn, no existing file is older than a nonexistent file. Two nonexistent files are considered the same age.
- file1
-ef file2 -
true if file1 has the same device and i-node number as file2
The following operators handle string comparisons for the test and [ commands:
- string
-
true if string is not a null string
- string1 = string2
-
true if string1 and string2 are identical
- string1 != string2
-
true if string1 and string2 are not identical
The [[ command has several operators which handle string comparisons and pattern-matching. In the following descriptions, pattern is a glob pattern as described in the File Name Generation section of sh. To treat pattern as a string, quote it.
- string == pattern
- string = pattern
-
true if string matches pattern.
- string != pattern
-
true if string does not match pattern.
- string1 < string2
-
true if string1 comes before string2 alphabetically.
- string1 > string2
-
true if string1 comes after string2 alphabetically.
The following operators allow you to combine other operators:
- expr1
-a expr2 (test and [ commands) - expr1 && expr2 ([[ command)
-
logical AND; true if both expr1 and expr2 are true
- expr1
-o expr2 (test and [ commands) - expr1 || expr2 ([[ command)
-
logical OR; true if either expr1 or expr2 is true
- ! expr
-
logical negation; true if expr is false
- ( expr )
-
binding; true if expr is true
The precedence of the operators, in descending order, is:
EXAMPLES
The following command reports on whether the first positional parameter contains a directory or a file:
if [ -f $1 ] then echo $1 is a file elif [ -d $1 ] then echo $1 is a directory else echo $1 neither file nor directory fi
This example illustrates the use of test and is not intended to be an efficient method.
ENVIRONMENT VARIABLES
- PATHEXT
-
contains a list of file extensions (separated by semicolons) for executable commands. Matching files with these extensions are searched for when an exact file name is not found with
-x . As the shell searches each directory in the search path, it appends each of the extensions in the list, in turn, to the specified file name and if it matches a file name in that directory, that file is checked to see if it is executable.By default, PATHEXT, has the value of 8.1/2012R2/10/2016/2019/11/2022's PATHEXT variable with .com;.exe;.bat;.sh;.ksh;.csh;.sed;.awk;.pl appended (omitting any extensions already represented in PATHEXT).
- TK_TEST_CHECK_FOR_EXTRA_ARGS
-
When set, test always checks to see if more arguments are present than are needed for the specified operator. If there are too many arguments, an error results.
DIAGNOSTICS
Possible exit status values are:
- 0
-
The expression was true.
- 1
-
The expression was false or missing.
- 2
-
The expression was badly formed.
PORTABILITY
POSIX.2. x/OPEN Portability Guide 4.0. All UNIX systems. Windows 8.1. Windows Server 2012 R2. Windows 10. Windows Server 2016. Windows Server 2019. Windows 11. Windows Server 2022.
The
The
NOTE
test, [, and [[ are built into the MKS KornShell. test is also implemented as a separate utility.
Failure to quote variable expansions is a common mistake. For example,
test $NULL != string
If NULL is undefined or empty, this results in
test != string
which is not a valid test expression. This problem can be fixed by enclosing $NULL in quotes.
AVAILABILITY
PTC MKS Toolkit for Power Users
PTC MKS Toolkit for System Administrators
PTC MKS Toolkit for Developers
PTC MKS Toolkit for Interoperability
PTC MKS Toolkit for Professional Developers
PTC MKS Toolkit for Professional Developers 64-Bit Edition
PTC MKS Toolkit for Enterprise Developers
PTC MKS Toolkit for Enterprise Developers 64-Bit Edition
SEE ALSO
- Miscellaneous:
- stat
Using the MKS KornShell
PTC MKS Toolkit 10.4 Documentation Build 39.