Loops are a set of commands that allow us to take a series of commands and keep re-running them until a particular situation is reached. In Bash scripting, there are 3 basic loop constructs for, while and do-while/repeat-until loop.
You can apply for loop on bash script in various ways. The for loop is different from other programming languages. Basically, it let’s you iterate over a series of ‘words’ within a string.
In this tutorial, we will explain how to use for loops in a Bash script with example.
Syntax of For Loop
The basic syntax of for loop is shown below:
for item in [LIST]
do
[COMMANDS]
done
Where LIST is a series of strings, numbers and an array. And COMMANDS is a series of commands.
Reading String Value
Let’s create a shell script named test.sh.
nano test.sh
Add the following lines:
#!/bin/bash
for i in a b c d e f
do
echo "String : $i"
done
Save the file. Then, run this script as shown below:
bash test.sh
Output:
String : a
String : b
String : c
String : d
String : e
String : f
In the above example the loop will iterate from a to f.
You can also use the sequence expression to specify a range of characters by defining a start and the end point of the range.
Now, edit the test.sh file.
nano test.sh
Make the following changes:
#!/bin/bash
for i in {a..h}
do
echo "String : $i"
done
Save the file and run it again.
bash test.sh
You should see the following output:
String : a
String : b
String : c
String : d
String : e
String : f
String : g
String : h
Reading Array Value
You can use for loop to iterate the values of an array.
To do so, create a new shell script named test1.sh:
nano test1.sh
Add the following lines:
#!/bin/bash
MonthList=("Jan Feb March April May June")
for month in $MonthList
do
echo "Month : $month"
done
Save the file then run the script with the following command:
bash test1.sh
You should see the following output:
Month : Jan
Month : Feb
Month : March
Month : April
Month : May
Month : June
Reading Command-line Arguments
You can also use Command-line arguments values with bash for loop.
For example, let’s create a new bash script name test2.sh:
nano test2.sh
Add the following lines:
#!/bin/bash
for val in $*
do
echo "My Argument: $val"
done
Save and close the file.
Then, run the above bash script with argument “I am Hitesh” as shown below:
bash test2.sh I am Hitesh
You should see the following output:
My Argument: I
My Argument: am
My Argument: Hitesh
Reading Content of File
You can read the content of the file using bash for loops.
For example, create a file named month.txt as shown below:
nano name.txt
Add the following content:
Hitesh
Jayesh
Vyom
Ninav
Disha
Save and close the file. Then, create a shell script named test3.sh:
nano test3.sh
Add the following lines:
#!/bin/bash
i=1
for var in `cat name.txt`
do
echo "NameList $i: $var"
((i++))
done
Save and close the file. Then, run the script with the following command:
bash test3.sh
You should see the following output:
NameList 1: Hitesh
NameList 2: Jayesh
NameList 3: Vyom
NameList 4: Ninav
NameList 5: Disha
Infinite For Loops
You can use empty expressions to create infinite loops.
For example, create a test4.sh file:
nano test4.sh
Add the following lines:
#!/bin/bash
for (( ; ; ))
do
echo "This is Infinite Loops"
done
Save the file. Then, run the script as shown below:
bash test4.sh
Output:
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
This is Infinite Loops
You can hit CTRL+C to stop the infinite loops.