Test Operators

The operators in Test Operators are used with test and the […] and [[…]] constructs. They can be logically combined with -a (“and”) and -o (“or”) and grouped with escaped parenthesis (\(…\)). The string comparisons < and > and the [[…]] construct are not available in versions of bash prior to 2.0, and =~ is only available in bash version 3.0 and later as noted.

Table A-9. Test operators

Operator

True if

-a file

file exists, deprecated, same as -e

-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; same as -a

-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

-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 string

string is non-null

-N file

file was 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 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 modification time is newer than fileA ...

Get bash Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.