## B.5. Test Operators

These are the operators that are used with the `[[`...`]]` construct. They can be logically combined with `&&` ("and") and `||` ("or") and grouped with parenthesis. When used with filenames of the form `/dev/fd/``N`, they test the corresponding attribute of open file descriptor N.

Operator | True if...
--- | ---
`-a` `file` | file exists. (Obsolete. `-e` is preferred.)
`-b` `file` | file is a block device file.
`-c` `file` | file is a character device file.
`-C` `file` | file is a contiguous file. (Not for most Unix versions.)
`-d` `file` | file is a directory.
`-e` `file` | file exists.
`-f` `file` | file is a regular file.
`-g` `file` | file has its setgid bit set.
`-G` `file` | file's group ID is the same as the effective group ID of the shell.
`-h` `file` | file is a symbolic link.
`-k` `file` | file has its sticky bit set.
`-l` `file` | file is a symbolic link. (Only works on systems where /bin/test -l tests for symbolic links.)
`-L` `file` | file is a symbolic link.
`-n` `string` | string is non-null.
`-o` `option` | option is set.
`-O` `file` | file is owned by the shell's effective user ID.
`-p` `file` | file is a pipe or named pipe (FIFO file).
`-r` `file` | file is readable.
`-s` `file` | file is not empty.
`-S` `file` | file is a socket.
`-t` `N` | File descriptor N points to a terminal.
`-u` `file` | file has its setuid bit set.
`-w` `file` | file is writable.
`-x` `file` | file is executable, or file is a directory that can be searched.
`-z` `string` | string is null.
`fileA` `-nt` fileB | fileA is newer than fileB, or fileB does not exist.
`fileA` `-ot` fileB | fileA is older than fileB, or fileB does not exist.
`fileA` `-ef` fileB | fileA and fileB point to the same file.
`string` `=` pattern | string matches pattern (which can contain wildcards). Obsolete; `==` is preferred.
`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.

The operators -eq, -ne, -lt, -le, -gt, and -ge are considered obsolete in ksh93; the let command or `((`...`))` should be used instead.

For `=`, `==`, and `!=`, quote pattern to do literal string comparisons.

Copyright © 2003 O'Reilly & Associates. All rights reserved.