Table 2.5 lists the operators that are used with test and the [ ... ] construct. They can be logically combined with -a ("and") and -o ("or") and grouped with escaped parenthesis ( \( ... \) ). The string comparisons < and > are not available in versions of bash prior to 2.0.
Table B.5. Test Operators | |
Operator | True If... |
-b file | file exists and is a block device file |
-c file | file exists and is a character device file |
-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 has its setgid bit set |
-G file | file exists and is owned by the effective group ID |
-k file | file exists and has its sticky bit set |
-L file | file exists and is a symbolic link |
-n string | string is non-null |
-O file | file exists and is owned by the effective user ID |
-p file | file exists and is a pipe or named pipe (FIFO file) |
-r file | file exists and is readable |
-s file | file exists and is not empty |
-S file | file exists and is a socket |
-t N | File descriptor N points to a terminal |
-u file | file exists and has its setuid bit set |
-w file | file exists and is writeable |
-x file | file exists and is executable, or file is a directory that can be searched |
-z string | string has a length of zero |
fileA -nt fileB | fileA is newer than fileB |
fileA -ot fileB | fileA is older than fileB |
fileA -ef fileB | fileA and fileB point to the same file |
stringA = stringB | stringA equals stringB |
stringA != stringB | stringA does not match stringB |
stringA < stringB | stringA sorts before stringB lexicographically |
stringA > stringB | stringA sorts after stringB lexicographically |
exprA -eq exprB | Arithmetic expressions exprA and exprB are equal |
exprA -ne exprB | Arithmetic expressions exprA and exprB are not equal |
exprA -lt exprB | exprA is less than exprB |
exprA -gt exprB | exprA is greater than exprB |
exprA -le exprB | exprA is less than or equal to exprB |
exprA -ge exprB | exprA is greater than or equal to exprB |
exprA -a exprB | exprA is true and exprB is true |
exprA -o exprB | exprA is true or exprB is true |