test Command

Purpose

Evaluates conditional expressions.

Syntax

test Expression

OR

[ Expression ]

Description

The test command evaluates the Expression parameter, and if the expression value is True, returns a zero (True) exit value. Otherwise, the test command returns a nonzero (False) exit value. The test command also returns a nonzero exit value if there are no parameters.

Requirements:
  • In the second form of the command, the [ ] (brackets) must be surrounded by blank spaces.
  • You must test explicitly for file names in the C shell. File-name substitution (globbing) causes the shell script to exit.

Functions and operators are treated as separate parameters by the test command. The Expression parameter refers to a statement that is checked for a true or false condition. The following functions are used to construct this parameter:

Item Description
-b FileName Returns a True exit value if the specified FileName exists and is a block special file.
-c FileName Returns a True exit value if the specified FileName exists and is a character special file.
-d FileName Returns a True exit value if the specified FileName exists and is a directory.
-e FileName Returns a True exit value if the specified FileName exists.
-f FileName Returns a True exit value if the specified FileName exists and is a regular file.
-g FileName Returns a True exit value if the specified FileName exists and its Set Group ID bit is set.
-h FileName Returns a True exit value if the specified FileName exists and is a symbolic link.
-k FileName Returns a True exit value if the specified FileName exists and its sticky bit is set.
-L FileName Returns a True exit value if the specified FileName exists and is a symbolic link.
-n String1 Returns a True exit value if the length of the String1 variable is nonzero.
-p FileName Returns a True exit value if the specified FileName exists and is a named pipe (FIFO).
-r FileName Returns a True exit value if the specified FileName exists and is readable by the current process.
-s FileName Returns a True exit value if the specified FileName exists and has a size greater than 0.
-t FileDescriptor Returns a True exit value if the file with a file descriptor number of FileDescriptor is open and associated with a terminal.
-u FileName Returns a True exit value if the specified FileName exists and its Set User ID bit is set.
-w FileName Returns a True exit value if the specified FileName exists and the write flag is on. However, the FileNamewill not be writable on a read-only file system even if test indicates true.
-x FileName Returns a True exit value if the specified FileName exists and the execute flag is on. If the specified file exists and is a directory, the True exit value indicates that the current process has permission to search in the directory.
-z String1 Returns a True exit value if the length of the String1 variable is 0 (zero).
String1= String2 Returns a True exit value if the String1 and String2 variables are identical.
String1!=String2 Returns a True exit value if the String1 and String2 variables are not identical.
String1 Returns a True exit value if the String1 variable is not a null string.
Integer1 -eq Integer2 Returns a True exit value if the Integer1 and Integer2 variables are algebraically equal. Any of the comparisons -ne, -gt, -ge, -lt, and -le can be used in place of -eq.
file1 -nt file2 True if file1 is newer than file2.
file1 -ot file2 True if file1 is older than file2.
file1 -ef file2 True if file1 is another name for file2.

These functions can be combined with the following operators:

Item Description
! Unary negation operator
-a Binary AND operator
-o Binary OR operator ( that is, the -a operator has higher precedence than the -o operator)
\(Expression\) Parentheses for grouping

Exit Status

This command returns the following exit values:

Item Description
0 The Expression parameter is true.
1 The Expression parameter is false or missing.
>1 An error occurred.

Examples

  1. To test whether a file exists and is not empty, enter the following command:
    if test ! -s "$1"
    then
       echo $1 does not exist or is empty.
    fi

    If the file specified by the first positional parameter to the shell procedure, $1, does not exist, the test command displays an error message. If $1 exists and has a size greater than 0, the test command displays nothing.

    Note: There must be a space between the -s function and the file name.

    The quotation marks around $1 ensure that the test works properly even if the value of $1 is a null string. If the quotation marks are omitted and $1 is the empty string, the test command displays the error message test: argument expected.

  2. To do a complex comparison, type:
    if [ $# -lt 2 -o ! -e "$1" ]
    then
       exit
    fi

    If the shell procedure is given fewer than two positional parameters or the file specified by $1 does not exist, then the shell procedure exits. The special shell variable $# represents the number of positional parameters entered on the command line that starts this shell procedure.

The Shells in Operating system and device management describes shells in general, defines terms that are helpful in understanding shells, and describes the more useful shell functions.

File

Item Description
/usr/bin/test Contains the test command.