# Flow Control in Bash Scripting

Learning about flow control in bash scripting is a great way to improve your skills. This article will teach you about the different ways that you can control the flow of your scripts. You'll learn about if statements, for loops, and while loops. By understanding these concepts, you'll be able to write more sophisticated scripts that are easier to read and maintain.


## What is Flow Control

When it comes to bash scripting, flow control is all about making sure that your commands are executed in the right order. This can be tricky since command lines don't always execute in the same order they're written. That's where flow control comes in. Using the various flow control structures, you can tell bash exactly what you want it to do and when you want it to do it.

This can be a great way to avoid errors and ensure that your scripts run smoothly. So, what are these various flow control structures? Let's take a closer look.

## If Statements
In bash scripting, an if statement is used to test a condition and execute a certain set of commands if that condition evaluates to true. The general syntax for an if statement is as follows:

          if [ condition ]
          then
            commands
          fi

An if statement starts with the** if **command in bash scripting. While **fi **indicates the end of the if statement. A nested if statement can also be used to test multiple conditions.

The condition can be any expression that returns a Boolean value (true or false). If the condition evaluates to true, the commands between the **then** and **fi** keywords will be executed. Otherwise, the commands will be skipped.

 In addition, an **else** keyword can be used to specify a set of commands to be executed if the condition evaluates to false.

For example, let's analyze the following code:

          #/bin/bash
          # Using if stament
          foo=3          
          if [[ “$foo” == 1 ]]
          then
               echo "Hello, world!"
          else
               echo "Goodbye, world!"
          fi


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657979717634/mrm37BLFW.png align="left")

If the variable `foo` equals 1, **"Hello, world!"** will be printed on the screen. But if the variable `foo` is not equal to 1, **"Goodbye world!"** will be printed.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657979840662/NX9Zgl4DL.png align="left")

Notice the spaces on both sides of the double brackets. Without those spaces, your program will throw you an error.

## For Loops
For loops in bash scripting are extremely useful for performing repetitive tasks. The basic syntax for a for loop is:

        for variable in list
        do
            command
        done

The list can be any sequence of words or numbers, and the commands can be anything you want to execute.
For example, if you wanted to print out the numbers 1 through 10, you could use the following 

for loop:
       
      #!/bin/bash
      # using for loop
      for i in 1 2 3 4 5 6 7 8 9 10
      do
         echo $i
      done


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657980288171/9ApACDA-c.png align="left")


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657980347877/D0q_9JCva.png align="left")

As you can see, the for loop will execute the echo command once for each number in the list. This can be very useful when performing the same task multiple times. So don't forget for loops the next time you're writing a bash script!

## While Loops
while loop lets you run a section of code repeatedly, as often as you need to. As long as the condition you specify is true, the code in the loop will keep running. This can be really handy when you're working with files or data sets that are constantly changing. While loops are also great for ensuring things happen in a certain order.

The basic syntax for a while loop is as follows:

      while [ condition ]
      do
         commands...
      done

Let's look at a few examples to see how while loops work in practice. In this first example, we'll use a while loop to print out the numbers from 1 to 10.
      
      #!/bin/bash
      # using while loop
      i=1
      while [[ $i -le 10 ]]
      do
            echo "$i"
            i=$(( i+1 ))
      done


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657980902257/-oc7MHJuNZ.png align="left")


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657980937054/ZjZ30LArt.png align="left")

In this case, we assigned our `i` variable a value of 1. Then we initiated the while loop. As long as i is less than 10, the program will print the value of `i`, then increment it by 1. In bash scripting, "le" represents less than or equals to. Once the value of `i` is greater 10, the while loop terminates.

## Functions
One last thing I want to talk about is **function.** In bash scripting, a function is a set of commands that can be executed together. Functions can be used to perform tasks such as displaying messages, performing calculations, or reading and writing files.

To create a function, you first need to choose a name for the function. This name can be anything you want, but it should be something that describes what the function does.

For example, if you were creating a function to display a message, you might name it `display_message.` Once you have chosen a name for your function, you need to define the function itself. This is done by specifying the commands that should be executed when the function is called. In our `display_message` example, we would specify the `echo` command, followed by the message we want to display.
A complete definition of a function will look like this:

      #!/bin/bash
      # defining a function in bash scripting

      display_message () {

      echo "Hello, world!"
      }


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657981467936/Dya4N4sa1.png align="left")


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1657981685037/w42roB7OK.png align="left")

Now that we have defined our function, we can call it from anywhere in our script. To do so, simply type the function name, in this case, `display_message.`

## Tips and Tricks for Working with Loops in Bash Scripting
Loops are a powerful tool in bash scripting but can also be tricky to work with. Here are a few tips and tricks to help you get the most out of your looping.

First, ensure you understand the difference between a for loop and a while loop. A `for` loop is best used when you know how many times you want the loop to run; a `while` loop is best used when you want the loop to run until a certain condition is met.

Next, pay attention to the syntax of your loops. Bash is particular about where you put your curly braces and semicolons, so if your loop isn't working as expected, check your syntax first.

Finally, remember that you can use the `break` and `continue` keywords to control the flow of your loop. `break` will exit the current loop iteration, while `continue` will skip to the next iteration. This can be handy if you need to process only certain items in a list or array.

With these tips in mind, you should be able to master bash loops in no time!

