Jump to content

Test (Unix): Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
Line 2: Line 2:
{{lowercase|title= test (Unix)}}
{{lowercase|title= test (Unix)}}


'''test''' is a command in [[Unix]] that evaluates conditional expressions.
'''test''' isThe following functions are used to construct this parameter:

==Syntax==
test ''expression''
or
[ ''expression'' ]

==Description==
The test command evaluates the expression parameter. In some shells (such as [[FreeBSD]] sh(1)), it is actually a shell builtin, even though external version still exists. 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.

==Functions==
The following functions are used to construct this parameter:


'''-b''' Filename - Returns a True exit value if the specified FileName exists
'''-b''' Filename - Returns a True exit value if the specified FileName exists
Line 74: Line 63:


==Exit Status==
==Exit Status==

This command returns the following exit values:

'''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 is nonexistent or empty, type:<!-- touch(1) -s file True if file exists and has a size greater than zero. -->

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.

==See also==
*[[List of Unix utilities]]
*The [[Bash (Unix shell)|bash]] command
*The [[C shell|csh]] command
*The [[find]] command
*The [[korn shell|ksh]] command
*The [[Bourne shell|sh]] command
*The [[Z Shell|zsh]] command.

==References==
<!--<nowiki>
See http://en.wikipedia.org/wiki/Wikipedia:Footnotes for an explanation of how to generate footnotes using the <ref> and </ref> tags, and the template below.
</nowiki>-->
<references/>
{{Unix commands}}

[[Category:Unix SUS2008 utilities]]
[[Category:Conditional constructs]]


[[fr:Test (Unix)]]
[[hu:Test (Unix)]]
[[pl:Test (Unix)]]
[[pl:Test (Unix)]]
[[ru:Test]]
[[ru:Test]]

Revision as of 23:44, 3 December 2010


test isThe following functions are used to construct this parameter:

-b Filename - Returns a True exit value if the specified FileName exists
   and is a block special file.

Note: All remaining functions return true if the object (file or string) exists, and the condition specified is true.

-c FileName - FileName is a character special file.
-d FileName - FileName is a directory.
-e FileName - FileName exists.
-f FileName - FileName is a regular file.
-g FileName - FileName's Set Group ID bit is set.
-h FileName - FileName is a symbolic link.
-k FileName - FileName's sticky bit is set.
-L FileName - FileName is a symbolic link.
-p FileName - FileName is a named pipe (FIFO).
-r FileName - FileName is readable by the current process.
-s FileName - FileName has a size greater than 0.
-t FileDescriptor - FileDescriptor is open and associated with a terminal.
-u FileName - FileName's Set User ID bit is set.
-w FileName - FileName's write flag is on. However, the FileName will
not be writable on a read-only file system even if test indicates true.
-x FileName - FileName's 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 change (chdir) into the directory.
file1 -nt file2 - file1 is newer than file2.
file1 -ot file2 - file1 is older than file2.
file1 -ef file2 - file1 is another name for file2. (symbolic link or hard link)

String functions

Note that in Perl, these sections are reversed: eq is a string operator and == is a numerical operator, and so on for the others.

-n String1 - the length of the String1 variable is nonzero.
-z String1 - the length of the String1 variable is 0 (zero).
String1 = String2 - String1 and String2 variables are identical.
String1 != String2 - String1 and String2 variables are not identical.
String1 - String1 variable is not a null string.

Number functions

Integer1 -eq Integer2 - Integer1 and Integer2 variables are algebraically
equal. Any of the following comparisons can be used in place of -eq.
-ne (not equal)
-gt (greater than)
-ge (greater or equal)
-lt (less than)
-le (less or equal) 

Operators

These functions can be combined with the following operators:

! - Unary negation operator
-a - Binary AND operator
-o - Binary OR operator (the -a operator has higher precedence 
      than the -o operator)
\(Expression\) - Parentheses for grouping must be escaped with a backslash (\).

The -a and -o operators, along with parentheses for grouping, are XSI extensions[1] and are therefore not portable. In portable shell scripts, the same effect may be achieved by connecting multiple invocations of test together with the && and || operators and parentheses.

Exit Status