7. Loops for, while and until

In this section you'll find for, while and until loops.

The for loop is a little bit different from other programming languages. Basically, it let's you iterate over a series of 'words' within a string.

The while executes a piece of code if the control expression is true, and only stops when it is false (or a explicit break is found within the executed code.

The until loop is almost equal to the while loop, except that the code is executed while the control expression evaluates to false.

If you suspect that while and until are very similar you are right.

7.1 For Loop sample

   #!/bin/bash
   for i in $( ls ); do
       echo item: $i
   done
   

On the second line, we declare i to be the variable that will take the different values contained in $( ls ).

The third line could be longer if needed, or there could be more lines before the done (4).

'done' (4) indicates that the code that used the value of $i has finished and $i can take a new value.

This script has very little sense, but a more useful way to use the for loop would be to use it to match only certain files on the previous example

Errata

  break [n] # exit n levels of loop
  continue [n] # go to next iteration of loop n up

7.1.1 For with Numbered List

   for x in 1 2 3 4 5 # or for x in {1..5}
   do
   echo "The value of x is $x";
   done

7.1.2 Expanded For

   LIMIT=10
   for ((x=1; x <= LIMIT ; x++))
   do
   echo -n "$x "
   done

7.1.3 For with a *~

   for file in *~
   do
   echo "$file"
   done

7.2 C-like for

fiesh suggested adding this form of looping. It's a for loop more similar to C/perl... for.

   #!/bin/bash
   for i in `seq 1 10`;
   do
   echo $i
   done    
   

7.3 While sample

    #!/bin/bash 
    COUNTER=0
    while [  $COUNTER -lt 10 ]; do
   echo The counter is $COUNTER
   let COUNTER=COUNTER+1 
    done
    

This script 'emulates' the well known (C, Pascal, perl, etc) 'for' structure

7.4 Until sample

    #!/bin/bash 
    COUNTER=20
    until [  $COUNTER -lt 10 ]; do
   echo COUNTER $COUNTER
   let COUNTER-=1
    done