--- layout: page category-page: scripts category-title: Scripting tags: loop while do script scripting read author: Matteo Omenetti title: While Loop ---

Loops are an important concept in programming and therefore also in scripting. Thanks to loops you are able to repeat an instruction automatically several times, until a certain condition turns false.
Two are the main types of loops: while and for. They both generate a repeating piece of code, but with some key differences that make them suitable for different needs while programming.
While loops take this form:

  while [condition]
  do
    command1
    command2
    command3
    ...
  done
  
Here is a first simple example:
  i=0;

  while [$i -lt 4]
  do
  echo $i
  i=$((i + 1))
  done
  
In this first example, you simply create a variable called i and evaluate it to 0. Then you acces the while loop: the condition [$i -lt 4] means that this while loop will run until the i varibale is less than 4. Every cycle of this loop, you print out the value of variable i with echo $i and finally you increase its value by 1 with i=$((i + 1)) . Therefore in 4 cycles the value of i will be 4. This will make the condition of the while loop false. The output of this piece of code is:
    0
    1
    2
    3
  
Sometimes it is required to decleare infinite loops for various programming purposes.
Here is an example:
  i=1

  while :
  do
    printf "i=$i\i: Hello World"
    if [ $i == 3 ]
    then
            echo "I love programming"
    elif [ $i == 5]
    then
            echo "I love Bash"
    elif [ $i == 7 ]
    then
            echo "I love this website"
    elif [ $i == 9 ]
    then
            exit 0
    i=$((i + 1))
    done
    
No termination condition is set for this loop in this example. This type of loop is called infinite loop. The exit statement is used to quit the loop. This loop will iterate for 9 times, then as soon as i becomes equal to 0, the condtition of the last if statement will evaluate to true and the loop will be terminated.
The output of this piece of code is:
       1: Hello World
       2: Hello World
       3: Hello World
       I love programming
       4: Hello World
       5: Hello World
       I love Bash
       6: Hello World
       7: Hello World
       I love this website
       8: Hello World
       9: Hello World
      
If you want your shell to hang forever doing nothing you can write out the following infinite loop:
    while :
    do
    :
    done
  
In scripting, while loops are often used to process files line by line.
Here is an examaple:
  while read -r first_name last_name phone;
  do
  printf '%s\n' "$last_name"
  done  "$file"
  
The read command is used to read a file line by line. The flag -r is used to tell the command read to intepret backslashes (/) literally, instead as escape characters. This command, expect for some few rare cases, should always be used with this flag. In this example, "$file" redirects the loop's input from a file whose name is stored in a variable. This file has 3 colums, first_name last_name phone , separated by blank space (or a tab). This piece of code only prints out the second column.