These are the operators that are used with the [[...]] construct. They can be logically combined with && ("and") and || ("or") and grouped with parenthesis.
| Operator | True If... |
|---|---|
| -a file | file exists. |
| -b file | file is a block device file. |
| -c file | file is a character device file. |
| -d file | file is a directory. |
| -f file | file is a regular file. |
| -g file | file has its setgid bit set. |
| -k file | file has its sticky bit set. |
| -n string | string is non-null. |
| -o option | option is set. |
| -p file | file is a pipe or named pipe (FIFO file). |
| -r file | file is readable. |
| -s file | file is not empty. |
| -t N | File descriptor N points to a terminal. |
| -u file | file has its setuid bit set. |
| -w file | file is writeable. |
| -x file | file is executable, or file is a directory that can be searched. |
| -z string | string is null. |
| -G file | file's group ID is the same as that of the shell. |
| -L file | file is a symbolic link. |
| -O file | file is owned by the shell's user ID. |
| -S file | file is a socket. |
| 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. |
| string = pattern | string matches pattern (which can contain wildcards). |
| string != pattern | string does not match pattern. |
| stringA < stringB | stringA comes before stringB in dictionary order. |
| stringA > stringB | stringA comes after stringB in dictionary order. |
| 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. |