aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc_src/test.txt
diff options
context:
space:
mode:
authorGravatar David Adam (zanchey) <zanchey@ucc.gu.uwa.edu.au>2013-07-29 16:06:05 +0800
committerGravatar David Adam (zanchey) <zanchey@ucc.gu.uwa.edu.au>2013-07-29 16:07:00 +0800
commit27d84ef8bec7eaf9d6eda54ab29f1572fc9197af (patch)
tree7e0c40e643874daa70296b6a10f4eb71c662ebe7 /doc_src/test.txt
parentbe77b9201e003cd11bd638f01882a4be0b9905e9 (diff)
documentation for test and function (closes: #734)
plus speling in documentation for bind. Note that this commit does not re-enable the generation of the manpage for test, which will therefore still fall through to the system manual page with `man test`.
Diffstat (limited to 'doc_src/test.txt')
-rw-r--r--doc_src/test.txt98
1 files changed, 76 insertions, 22 deletions
diff --git a/doc_src/test.txt b/doc_src/test.txt
index 600e7ea7..fc64118e 100644
--- a/doc_src/test.txt
+++ b/doc_src/test.txt
@@ -6,37 +6,91 @@
\subsection test-description Description
Tests the expression given and sets the exit status to 0 if true,
-and 1 if false.
+and 1 if false. An expression is made up of one or more operators
+and their arguments.
-The following options are available:
-- \c -h displays a help message and then exits.
-- <tt>-L FILE</tt> returns true if \c FILE is a symbolic link.
-- <tt>-S FILE</tt> returns true if \c FILE is a socket.
-- <tt>COND1 -a COND2</tt> combines two conditions with a logical and.
+The following operators are available to examine files and directories:
- <tt>-b FILE</tt> returns true if \c FILE is a block device.
- <tt>-c FILE</tt> returns true if \c FILE is a character device.
- <tt>-d FILE</tt> returns true if \c FILE is a directory.
- <tt>-e FILE</tt> returns true if \c FILE exists.
- <tt>-f FILE</tt> returns true if \c FILE is a regular file.
-- <tt>-f FILE</tt> returns true if \c FILE has set-group-ID bit set.
-- <tt>-n STRING</tt> returns true if the length of \c STRING is non-zero.
-- <tt>COND1 -o COND2</tt> combines two conditions with a logical or.
+- <tt>-g FILE</tt> returns true if \c FILE has the set-group-ID bit set.
+- <tt>-L FILE</tt> returns true if \c FILE is a symbolic link.
- <tt>-p FILE</tt> returns true if \c FILE is a named pipe.
-- <tt>-r FILE</tt> returns true if \c FILE is readable.
-- <tt>-s FILE</tt> returns true if the size of \c FILE is non-zero.
-- <tt>-t FD</tt> returns true if \c FD is a terminal (TTY).
-- <tt>-u FILE</tt> returns true if \c FILE has set-user-ID bit set.
-- <tt>-w FILE</tt> returns true if \c FILE is writable.
-- <tt>-x FILE</tt> returns true if \c FILE is executable.
-- <tt>-z STRING</tt> returns true if \c STRING length is zero.
+- <tt>-r FILE</tt> returns true if \c FILE is marked as readable.
+- <tt>-s FILE</tt> returns true if the size of \c FILE is greater than zero.
+- <tt>-S FILE</tt> returns true if \c FILE is a socket.
+- <tt>-t FD</tt> returns true if the file descriptor \c FD is a terminal (TTY).
+- <tt>-u FILE</tt> returns true if \c FILE has the set-user-ID bit set.
+- <tt>-w FILE</tt> returns true if \c FILE is marked as writable; note that this does not check if the filesystem is read-only.
+- <tt>-x FILE</tt> returns true if \c FILE is marked as executable.
+
+The following operators are available to compare and examine text strings:
+- <tt>STRING1 = STRING2</tt> returns true if the strings \c STRING1 and
+\c STRING2 are identical.
+- <tt>STRING1 != STRING2</tt> returns true if the strings \c STRING1 and
+\c STRING2 are not identical.
+- <tt>-n STRING</tt> returns true if the length of \c STRING is non-zero.
+- <tt>-z STRING</tt> returns true if the length of \c STRING is zero.
+
+The following operators are available to compare and examine numbers:
+- <tt>NUM1 -eq NUM2</tt> returns true if \c NUM1 and \c NUM2 are numerically equal.
+- <tt>NUM1 -ne NUM2</tt> returns true if \c NUM1 and \c NUM2 are not numerically equal.
+- <tt>NUM1 -gt NUM2</tt> returns true if \c NUM1 is greater than <tt>NUM2</tt>.
+- <tt>NUM1 -ge NUM2</tt> returns true if \c NUM1 is greater than or equal to <tt>NUM2</tt>.
+- <tt>NUM1 -lt NUM2</tt> returns true if \c NUM1 is less than <tt>NUM2</tt>.
+- <tt>NUM1 -le NUM2</tt> returns true if \c NUM1 is less than or equal to <tt>NUM2</tt>.
+
+Note that only integers are supported. For more complex mathematical
+operations, including fractions, the \c env program may be useful. Consult the
+documentation for your operating system.
+
+Expressions can be combined using the following operators:
+- <tt>COND1 -a COND2</tt> returns true if both \c COND1 and \c COND2 are true.
+- <tt>COND1 -o COND2</tt> returns true if either \c COND1 or \c COND2 are true.
+
+Expressions can be inverted using the \c ! operator:
+- <tt>! EXPRESSION</tt> returns true if \c EXPRESSION is false, and false if
+\c EXPRESSION is true.
-\subsection test-example Example
+Expressions can be grouped using parentheses.
+- <tt>( EXPRESSION )</tt> returns the value of <tt>EXPRESSION</tt>.
+Note that parentheses will usually require escaping with <tt>\\(</tt> to avoid
+being interpreted as a command substitution.
+
+\subsection test-example Examples
+
+If the \c /tmp directory exists, copy the \c /etc/motd file to it:
+
+<pre>
+if test -d /tmp
+ cp /etc/motd /tmp/motd
+end
+</pre>
+
+If the variable \c MANPATH is defined and not empty, print the contents:
<pre>
-if test -d "/"
- echo "Fish is cool"
+if test -n $MANPATH
+ echo $MANPATH
end
-</pre>
+</pre>
+
+Parentheses and the \c -o and \c -a operators can be combined to produce
+more complicated expressions. In this example, success is printed if there is
+a \c /foo or \c /bar file as well as a \c /baz or \c /bat file.
+
+<pre>
+if test \\( -f /foo -o -f /bar \\) -a \\( -f /baz -o -f /bat \\)
+ echo Success.
+end.
+</pre>
+
+\subsection test-standards Standards
+
+\c test implements a subset of the
+<a href="http://www.unix.com/man-page/POSIX/1/test/">IEEE Std 1003.1-2008
+(POSIX.1) standard</a>. The following exceptions apply:
+- The \c < and \c > operators for comparing strings are not implemented.
-Because "/" is a directory, the expression will evaluate to true, and
-"Fish is cool" will be output.