test evaluates the expression expr, and if its value
    is true then returns zero exit status; otherwise, a non zero exit status is
    returned. test returns a non zero exit if there are no arguments.
The following primitives are used to construct expr:
  - -r file
 
  - true if the file exists and is readable.
 
  - -w file
 
  - true if the file exists and is writable.
 
  - -u file
 
  - true if the file exists and has the setuid bit set.
 
  - -g file
 
  - true if the file exists and has the setgid bit set.
 
  - -k file
 
  - true if the file exists and has the sticky bit set.
 
  - -f file
 
  - true if the file exists and is a regular file.
 
  - -d file
 
  - true if the file exists and is a directory.
 
  - -h file
 
  - true if the file exists and is a symbolic link.
 
  - -L file
 
  - true if the file exists and is a symbolic link.
 
  - -p file
 
  - true if the file exists and is a named pipe.
 
  - -b file
 
  - true if the file exists and is a block device.
 
  - -c file
 
  - true if the file exists and is a character device.
 
  - -S file
 
  - true if the file exists and is a socket (/usr/5bin/posix/test and
      /usr/5bin/posix2001/test only).
 
  - -e file
 
  - true if the file exists (/usr/5bin/posix/test and
      /usr/5bin/posix2001/test only).
 
  - -s file
 
  - true if the file exists and has a size greater than zero.
 
  - -t [fildes]
 
  - true if the open file whose file descriptor number is fildes (1 by
      default) is associated with a terminal device.
 
  - -z s1
 
  - true if the length of string s1 is zero.
 
  - -n s1
 
  - true if the length of the string s1 is nonzero.
 
  - s1 = s2
 
  - true if the strings s1 and s2 are equal.
 
  - s1 != s2
 
  - true if the strings s1 and s2 are not equal.
 
  - s1
 
  - true if s1 is not the null string.
 
  - n1 -eq n2
 
  - true if the integers n1 and n2 are algebraically equal. Any
      of the comparisons -ne, -gt, -ge, -lt, or
      -le may be used in place of -eq.
 
These primaries may be combined with the following operators:
  - !
 
  - unary negation operator
 
  - -a
 
  - binary and operator
 
  - -o
 
  - binary or operator
 
  - ( expr )
 
  - parentheses for grouping.
 
-a has higher precedence than -o. Notice that all
    the operators and flags are separate arguments to test. Notice also
    that parentheses are meaningful as command separators and must be
  escaped.