dreamsys software

UNIX & Linux Shell Scripting Tutorial

Looping

While Loop

The while statement is used when you want to loop while a statement is true. This is the same in many other programming and scripting languages. The body of the loop is put between do and done. Suppose that we want to write a script to have the user guess what number we are thinking of. The best way to use this would be to use a while loop.

#!/bin/sh
# Guess the number game.

ANSWER=5          # The correct answer
CORRECT=false     # The correct flag

while [ "$CORRECT" != "true" ]
do
        # Ask the user for the number...
        echo "Guess a number between 1 and 10. "
        read NUM

        # Validate the input...
        if [ "$NUM" -lt 1 ] || [ "$NUM" -gt 10 ]; then
                echo "The number must be between 1 and 10!"
        elif [ "$NUM" -eq "$ANSWER" ]; then
                echo "You got the answer correct!"
                CORRECT=true
        else
                echo "Sorry, incorrect."
        fi
done

You can also loop while reading a variable to make the code simpler. Let's try the above example revised:

#!/bin/sh
# Guess the number game.  Version 2.0

ANSWER=5          # The correct answer

echo "Guess a number between 1 and 10. "

while read NUM
do
        # Validate the input...
        if [ "$NUM" -lt 1 ] || [ "$NUM" -gt 10 ]; then
                echo "The number must be between 1 and 10! Guess again. "
        elif [ "$NUM" -eq "$ANSWER" ]; then
                echo "You got the answer correct!"
                exit
        else
                echo "Incorrect, guess again. "
        fi
done

Another way to loop forever is to use the : in your while statement. Let's write a simple program that will print out how long it has been running until the user presses Ctrl+C to terminate the program.

#!/bin/sh

COUNTER=0

while :
do
	sleep 1
	COUNTER=`expr $COUNTER + 1`
	echo "Program has been running for $COUNTER seconds..."
done

This program will loop until the user presses Ctrl+C. Notice that we use something else new here. The unix expr command is used to evaluate a mathematical expression. If you want to increment a variable, this is the command that you will use.

For Loop

The for statement is used when you want to loop through a list of items. The body of the loop is put between do and done. Let's say that we want to write a program that will validate numbers in a given list. These numbers can be loaded from a file, hard coded, or manually entered by the user. For our example, we will ask the user for a list of numbers separated with spaces. We will validate each number and make sure that it is between 1 and 100. The best way to write a program like this would be to use a for loop.

#!/bin/sh
# Validate numbers...

echo "Please enter a list of numbers between 1 and 100. "
read NUMBERS

for NUM in $NUMBERS
do
	if [ "$NUM" -lt 1 ] || [ "$NUM" -gt 100 ]; then
		echo "Invalid Number ($NUM) - Must be between 1 and 100!"
	else
		echo "$NUM is valid."
	fi
done

Notice that we give the for statement a variable "NUM", this can be whatever variable name you want to use. It will loop through each item in the given variable (in this case $NUMBERS) and put that item in the $NUM variable. Run the file and give it the input "1 4 3 55 48 120 1000 4 1" and you will have the following output:

Please enter a list of numbers between 1 and 100.
1 4 3 55 48 120 1000 4 1
1 is valid.
4 is valid.
3 is valid.
55 is valid.
48 is valid.
Invalid Number (120) - Must be between 1 and 100!
Invalid Number (1000) - Must be between 1 and 100!
4 is valid.
1 is valid.

Prev (If/Else) | Next (Cases)


Blog Entries
Blob Entry 1
Blob Entry 2
Blob Entry 3
Blob Entry 4
Blob Entry 5
Blob Entry 6