Click on any of the 687 commands below to get a description and list of available options. All links in the command summaries point to the online version of the book on Safari Bookshelf.
Evaluate an expression and, if its value is true, return a zero exit status; otherwise, return a nonzero exit status. In shell scripts, you can use the alternate form [expression] . This command is generally used with conditional constructs in shell programs. Also exists as a built-in in most shells.
File testers
The syntax for all of these options is testoption file. If the specified file does not exist, they return false. Otherwise, they test the file as specified in the option description.
-b
Is the file block special?
-c
Is the file character special?
-d
Is the file a directory?
-e
Does the file exist?
-f
Is the file a regular file?
-g
Does the file have the set-group-ID bit set?
-k
Does the file have the sticky bit set?
-L, -h
Is the file a symbolic link?
-p
Is the file a named pipe?
-r
Is the file readable by the current user?
-s
Is the file nonempty?
-S
Is the file a socket?
-t [file-descriptor]
Is the file associated with file-descriptor (or 1, standard output, by default) connected to a terminal?
-u
Does the file have the set-user-ID bit set?
-w
Is the file writable by the current user?
-x
Is the file executable?
-O
Is the file owned by the process's effective user ID?
-G
Is the file owned by the process's effective group ID?
File comparisons
The syntax for file comparisons is testfile1 option file2. A string by itself, without options, returns true if it's at least one character long.
-nt
Is file1 newer than file2? Check modification date, not creation date.
-ot
Is file1 older than file2? Check modification date, not creation date.
-ef
Do the files have identical device and inode numbers?
String tests
The syntax for string tests is testoption string or teststring1 [!] =string2.
-z
Is the string 0 characters long?
-n
Is the string at least 1 character long?
string1 =string2
Are the two strings equal?
string1 !=string2
Are the strings unequal?
Expression tests
Note that an expression can consist of any of the previous tests.
(expression)
Is the expression true?
!expression
Is the expression false?
expression-aexpression
Are the expressions both true?
expression-oexpression
Is either expression true?
Integer tests
The syntax for integer tests is testinteger1 option integer2. You may substitute -lstring for an integer; this evaluates to string's length.