bash: Looping Constructs

 
 3.2.4.1 Looping Constructs
 ..........................
 
 Bash supports the following looping constructs.
 
    Note that wherever a ';' appears in the description of a command's
 syntax, it may be replaced with one or more newlines.
 
 'until'
      The syntax of the 'until' command is:
 
           until TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
 
      Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
      status which is not zero.  The return status is the exit status of
      the last command executed in CONSEQUENT-COMMANDS, or zero if none
      was executed.
 
 'while'
      The syntax of the 'while' command is:
 
           while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
 
      Execute CONSEQUENT-COMMANDS as long as TEST-COMMANDS has an exit
      status of zero.  The return status is the exit status of the last
      command executed in CONSEQUENT-COMMANDS, or zero if none was
      executed.
 
 'for'
      The syntax of the 'for' command is:
 
           for NAME [ [in [WORDS ...] ] ; ] do COMMANDS; done
 
      Expand WORDS, and execute COMMANDS once for each member in the
      resultant list, with NAME bound to the current member.  If 'in
      WORDS' is not present, the 'for' command executes the COMMANDS once
      for each positional parameter that is set, as if 'in "$@"' had been
      specified (SeeSpecial Parameters).  The return status is the
      exit status of the last command that executes.  If there are no
      items in the expansion of WORDS, no commands are executed, and the
      return status is zero.
 
      An alternate form of the 'for' command is also supported:
 
           for (( EXPR1 ; EXPR2 ; EXPR3 )) ; do COMMANDS ; done
 
      First, the arithmetic expression EXPR1 is evaluated according to
      the rules described below (SeeShell Arithmetic).  The
      arithmetic expression EXPR2 is then evaluated repeatedly until it
      evaluates to zero.  Each time EXPR2 evaluates to a non-zero value,
      COMMANDS are executed and the arithmetic expression EXPR3 is
      evaluated.  If any expression is omitted, it behaves as if it
      evaluates to 1.  The return value is the exit status of the last
      command in COMMANDS that is executed, or false if any of the
      expressions is invalid.
 
    The 'break' and 'continue' builtins (SeeBourne Shell Builtins)
 may be used to control loop execution.