
| test | |
| Developer: | Various open-source and commercial developers |
| Other Names: | [| latest release version =
| latest release date =
| programming language = [[C (programming language)|C]]| operating system = Unix, Unix-like, Plan 9, IBM i| platform = Cross-platform| genre = Command| license = coreutils: GPLv3+ Plan 9: MIT License| website = |
test is a command-line utility found in Unix, Plan 9, and Unix-like operating systems that evaluates conditional expressions. test was turned into a shell builtin command in 1981 with UNIX System III and at the same time made available under the alternate name ['''.<ref>http://www.in-ulm.de/~mascheck/bourne/#system3 {{Webarchive|url=https://web.archive.org/web/20190504035047/https://www.in-ulm.de/~mascheck/bourne/PWB/#system3 |date=2019-05-04 }} Bourne Shell changes with System III</ref>
==Overview==
The <code>test</code> command in Unix evaluates the <code>expression</code> parameter. In most recent shell implementations, it is a [[shell builtin]], even though the external version still exists. In the second form of the command, the [ ] (brackets) must be surrounded by blank spaces (this is because [ is a program and POSIX compatible shells require a space between the program name and its arguments). One must test explicitly for file names in the C shell. File-name substitution (globbing) causes the shell script to exit.
The test command is not to be confused with the [[ reserved word that was introduced with ksh88. The latter is not a command but part of the ksh88 syntax and does not apply file-name substitution to glob expressions.
The version of test bundled in GNU coreutils was written by Kevin Braunsdorf and Matthew Bradburn.[1] The command is available as a separate package for Microsoft Windows as part of the UnxUtils collection of native Win32 ports of common GNU Unix-like utilities.[2] The command has also been ported to the IBM i operating system.[3]
test ''expression'' or [ ''expression'' ]
The following arguments are used to construct this parameter. All arguments return True if the object (file or string) exists, and the condition specified is true.
| Argument | Returns True if the file | |
|---|---|---|
| -b | is a block special file | |
| -c | is a character special file | |
| -d | is a directory | |
| -e | exists | |
| -f | is a regular file | |
| -g | has the Set Group ID bit set | |
| -h | is a symbolic link | |
| -k | has the sticky bit set | |
| -L | is a symbolic link | |
| -p | is a named pipe (FIFO) | |
| -r | is readable by the current process | |
| -s | has a size greater than 0 | |
| -t | FileDescriptor is open and associated with a terminal | |
| -u | has the Set User ID bit set | |
| -w | has the write flag is on | |
| -x | has execute flag on |
-x argument, if the specified file exists and is a directory, the True exit value indicates that the current process has permission to change cd into the directory.file1 -nt file2 - file1 is newer than file2 file1 -ot file2 - file1 is older than file2 file1 -ef file2 - file1 is another name for file2 - (symbolic link or hard link)
In Perl, these sections are reversed: eq is a string operator and == is a numerical operator, and so on for the others.
-n String1 - the length of the String1 variable is nonzero -z String1 - the length of the String1 variable is 0 (zero) String1 = String2 - String1 and String2 variables are identical String1 != String2 - String1 and String2 variables are not identical String1 - true if String1 variable is not a null string
Integer1 -eq Integer2 - Integer1 and Integer2 variables are algebraically equal -ne - not equal -gt - greater than -ge - greater or equal -lt - less than -le - less or equal
test arguments can be combined with the following operators: ! - Unary negation operator -a - Binary AND operator -o - Binary OR operator (the -a operator has higher precedence than the -o operator) \(Expression\) - Parentheses for grouping must be escaped with a backslash \
The -a and -o operators, along with parentheses for grouping, are XSI extensions[4] and are therefore not portable. In portable shell scripts, the same effect may be achieved by connecting multiple invocations of test together with the && and || operators and parentheses.
This command returns the following exit values:
0 - The Expression parameter is true 1 - The Expression parameter is false or missing >1 - An error occurred
1. To test whether a file is nonexistent or empty, type:
Note: There must be a space between the -s function and the file name.
The quotation marks around $1 ensure that the test works properly even if the value of $1 is a null string. If the quotation marks are omitted and $1 is the empty string, the test command displays the error message:
test: argument expected.
2. To do a complex comparison, type:
test . 2006-11-08 . 2008-07-08 . https://web.archive.org/web/20080708224750/http://www.opengroup.org/onlinepubs/009695399/utilities/test.html . live .