NAME                                                       IF(I)
     if	-  conditional command

SYNOPSIS
     if	expr command [ arg ... ]

     if	expr then
	  command(s)
	  ...
     [ else [ command ]
	  ... ]
     endif

     test expr

DESCRIPTION
     If	evaluates the expression expr. In the first  form  above,
     if	 expr  is  true,  the  given command is	executed with the
     given arguments.  The command may be another if.

     In	the second form, if expr is true,  the	commands  between
     the then and the next unmatched else or endif are	executed.
     If	expr is	false, the commands after then are  skipped,  and
     the  commands after the optional else are executed.  Zero or
     one commands may be written on the	same line as the else. In
     particular,  if  may  be used this	way.  The pseudo commands
     else and endif (whichever occurs first) must not  be  hidden
     behind  semicolons	 or  other  commands.	This  form may be
     nested: every then	needs a	matching endif.

     Test is an	entry to if that  evaluates  the  expression  and
     returns exit code 0 if it is true,	and code 1 if it is false
     or	in error.

     The following primitives are used to construct the	expr:

     -r	file   true if the file	exists and is readable.

     -w	file   true if the file	exists and is writable.

     -s	file   true if the file	exists and  has	 a  size  greater
     than zero.

     -f	file   true if the file	exists and is an ordinary file.

     -d	file   true if the file	exists and is a	directory.

     -z	s1     true if the length of string s1 is zero.

     -n	s1     true if the length of 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.

     n1	-eq n2 n1 -ne n2 n1 -gt	n2 n1 -ge n2 n1	 -lt  n2  n1  -le
     n2	true  if  the  stated algebraic	relationship exists.  The
     arguments n1 and n2 must be integers.

     { command }    The	bracketed command is executed  to  obtain
     the  exit	status.	 Status	zero is	considered true. The com-
     mand must not be another if.

     These primaries may be combined with  the	following  opera-
     tors:

     !	  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 opera-
     tors  and	flags are separate arguments to	if and hence must
     be	surrounded by spaces.  Notice also that	 parentheses  are
     meaningful	to the Shell and must be escaped.

EXIT CODES
     0 - true expression, no error.
     1 - false condition or error.

SEE ALSO
     exit(I), goto(I), sh(I), switch(I), while(I), exit(II)

DIAGNOSTICS
     if:missing	endif
     if:syntax error:  value
     if:non-numeric arg:  value
     if:no command:  name
     else:missing endif

     Test may issue any	of the	if  messages  above,  except  the
     first.

BUGS
     In	general, if, else, endif, and test  must  not  be  hidden
     behind  semicolons	 on  a command line.  Many of the effects
     are obtained by searching the input file and  adjusting  the
     read  pointer  appropriately.   Thus, including any of these
     commands in a part	of the file intended to	be read	by a com-
     mand  other than the shell	may cause strange results if they
     are encountered while searching.
     These commands ignore redirection or piping of  their  stan-
     dard  input  or output.  Commands executed	by if or test may
     be	affected by redirections, but this practice  is	 undesir-
     able and should be	avoided.