test
test EXPRESSION
test
test EXPRESSION ]
test ]
test OPTION
test
Check file types and compare values.
Options
Exit with the status determined by EXPRESSION
.
An omitted EXPRESSION
defaults to false.
Otherwise, EXPRESSION
is true or false and sets exit status.
It is one of:
- ( EXPRESSION )
EXPRESSION
is true - ! EXPRESSION
EXPRESSION
is false - EXPRESSION1 -a EXPRESSION2 both
EXPRESSION1
andEXPRESSION2
are true - EXPRESSION1 -o EXPRESSION2 either
EXPRESSION1
orEXPRESSION2
is true
String operations:
- -n STRING the length of
STRING
is nonzero - STRING equivalent to -n
STRING
- -z STRING the length of
STRING
is zero - STRING1 = STRING2 the strings are equal
- STRING1 != STRING2 the strings are not equal
Integer comparisons:
- INTEGER1 -eq INTEGER2
INTEGER1
is equal toINTEGER2
- INTEGER1 -ge INTEGER2
INTEGER1
is greater than or equal toINTEGER2
- INTEGER1 -gt INTEGER2
INTEGER1
is greater thanINTEGER2
- INTEGER1 -le INTEGER2
INTEGER1
is less than or equal toINTEGER2
- INTEGER1 -lt INTEGER2
INTEGER1
is less thanINTEGER2
- INTEGER1 -ne INTEGER2
INTEGER1
is not equal toINTEGER2
File operations:
-
FILE1 -ef FILE2
FILE1
andFILE2
have the same device and inode numbers -
FILE1 -nt FILE2
FILE1
is newer (modification date) thanFILE2
-
FILE1 -ot FILE2
FILE1
is older thanFILE2
-
-b FILE
FILE
exists and is block special -
-c FILE
FILE
exists and is character special -
-d FILE
FILE
exists and is a directory -
-e FILE
FILE
exists -
-f FILE
FILE
exists and is a regular file -
-g FILE
FILE
exists and is set-group-ID -
-G FILE
FILE
exists and is owned by the effective group ID -
-h FILE
FILE
exists and is a symbolic link (same as -L) -
-k FILE
FILE
exists and has its sticky bit set -
-L FILE
FILE
exists and is a symbolic link (same as -h) -
-N FILE
FILE
exists and has been modified since it was last read -
-O FILE
FILE
exists and is owned by the effective user ID -
-p FILE
FILE
exists and is a named pipe -
-r FILE
FILE
exists and read permission is granted -
-s FILE
FILE
exists and has a size greater than zero -
-S FILE
FILE
exists and is a socket -
-t FD
file
descriptorFD
is opened on a terminal -
-u FILE
FILE
exists and its set-user-ID bit is set -
-w FILE
FILE
exists and write permission is granted -
-x FILE
FILE
exists and execute (or search) permission is granted
Except for -h
and -L
, all FILE-related tests dereference (follow) symbolic links.
Beware that parentheses need to be escaped (e.g., by backslashes) for shells.
INTEGER
may also be -l STRING
, which evaluates to the length of STRING
.
NOTE: Binary -a
and -o
are inherently ambiguous.
Use test EXPR1 && test EXPR2
or test EXPR1 || test EXPR2
instead.
NOTE: [
honors the --help
and --version
options, but test does not.
test treats each of those as it treats any other nonempty STRING
.
NOTE: your shell may have its own version of test
and/or [
, which usually supersedes the version described here.
Please refer to your shell's documentation for details about the options it supports.
Examples
Test if a given variable is equal to a given string:
test "{{$MY_VAR}}" = "{{/bin/zsh}}"
Test if a given variable is empty:
test -z "{{$GIT_BRANCH}}"
Test if a file exists:
test -f "{{path/to/file_or_directory}}"
Test if a directory does not exist:
test ! -d "{{path/to/directory}}"
If A is true, then do B, or C in the case of an error (notice that C may run even if A fails):
test {{condition}} && {{echo "true"}} || {{echo "false"}}
The examples are provided by the tldr-pages project under the CC BY 4.0 License.
Please note that, as uutils is a work in progress, some examples might fail.