- Senior Writer
- Author
In shell scripting, Bash if statements are essential for decision-making. They allow scripts to react differently based on conditions such as user input, command results, or system states.
The basic structure of a bash if statement starts with the if keyword, followed by a condition, the then keyword, and the commands to run if the condition is true. To handle more possibilities, you can add an elif for extra checks and else for a fallback when no conditions are met.
By combining if statements with other Bash features, you can create powerful, flexible scripts that automate a wide range of tasks.
Before diving into bash scripts, let’s understand what Bash scripting is.
Imagine your computer is a factory with workers performing different tasks — assembling parts, packaging products, or sorting materials. Bash scripting is like creating an operations manual that gives each worker clear instructions on how to perform their tasks in the correct sequence. Rather than telling each worker what to do individually every time, you simply give them the manual — the Bash script — and they follow it automatically.
When you run the script, the Bash shell acts like the factory manager, guiding the workers step by step, ensuring each task is completed correctly. This helps you automate repetitive processes such as data analysis, file organization, or managing system configurations.
However, before the factory can start operating, everything must be in place — materials must be ready, machines must be calibrated, and workers must be informed of their tasks. Similarly, for your script to run, it needs to be properly set up — a crucial step is making sure it has the right permissions to be executed, ensuring that all systems are ready to go.
In Bash scripting, bash if multiple conditions, especially the bash if statement plays an important role in controlling how a script behaves based on certain conditions. They allow your script to make decisions and choose different paths of execution depending on the results of a test.
When an if statement is encountered, Bash checks whether a given condition is true. If it is, the commands inside the then block are carried out.
But what happens if the condition is false? The script then checks any following elif (else-if) conditions. If one of those turns out to be true, the associated commands are executed instead.
And if none of the conditions, neither if nor elif, are met, Bash checks if there’s an else block at the end. If present, it executes the commands in that block as a fallback.
In essence, the bashif statement enables decision-making within your script. The condition being tested might depend on many things, such as the value of a variable, the result of a comparison, or the success or failure of a command.
By using if, elif, and else, you can build logic into your scripts that adapts to different situations, making them more flexible and intelligent.
Bash scripting follows a specific set of rules, known as syntax, that determines how commands and scripts are structured. Getting familiar with this syntax is essential for writing functional and efficient Bash scripts. Let’s break down the key elements:
Core Components of Bash if Statement Syntax
Commands: These are the executable actions — either built into the shell or external programs — that perform tasks. You’ll be using these commands most frequently in your scripts.
Arguments: Arguments provide additional information to commands, helping define how they should behave. You can think of them as the fine-tuning details for command execution.
Variables: Variables are used to store and manipulate data. They make your scripts dynamic by allowing you to reuse and modify values.
Redirection: With redirection, you can control where the output of a command goes, whether that’s a file, another program, or even discarded. It also helps manage input sources and error messages.
Pipes (|): A pipe connects one command's output directly to another's input. This allows for powerful, chained operations in a single line.
Control Structures: These guide the script’s flow. Loops, conditionals, and functions all fall under this category. They're vital for building logic into your scripts.
Comments: Comments (marked with #) are notes in your code that the shell ignores. Use them to explain what your code does — helpful for debugging or collaborating with others.
Here’s how an if statement is typically written in Bash:
if [ condition ]
then
command1
command2
...
elif [ another_condition ]
then
commandA
commandB
...
else
fallbackCommand1
fallbackCommand2
...
fi
How Bash if statements work?
if [ condition ]: This line checks a condition. If it's true, the script runs the commands that follow under the then block.
elif (else if): If the initial if condition fails, Bash checks the elif condition. If that’s true, it runs the associated commands.
else: If neither the if nor elif conditions are true, the script falls back to the else block and executes those commands.
fi: This keyword marks the end of the bash if statement block — it literally stands for “if” in reverse.
When writing bash if statements with conditional logic, following a few key rules is important to avoid frustrating errors. Here are three fundamental practices that will help you write cleaner, more reliable bash conditions.
In bash scripting, spacing is crucial. When using square brackets [ ] for conditions, make sure to place spaces between the brackets and the condition itself.
Wrong:
if [$foo -ge 3]; then
Right:
if [ $foo -ge 3 ]; then
Why it matters: Bash interprets conditions based on specific syntax. Without proper spacing, it misreads the expression and throws an error or behaves unexpectedly.
Control keywords like then, else, elif, and fi must either start a new line or follow a semicolon. Skipping this formatting leads to syntax issues.
Wrong:
if [ $foo -ge 3]then
Right:
if [ $foo -ge 3 ]; then
Tip: Ending the condition with a semicolon or a line break before then ensures the shell interprets the script properly.
Always wrap string variables in double quotes when comparing them in conditional statements. This avoids problems if the string contains spaces or other special characters.
Wrong:
if [ $username == "admin" ]; then
Right:
if [ "$username" == "admin" ]; then
Reason: Quoting variables prevents word splitting and unexpected errors, especially when dealing with user input or data with spaces.
In Bash scripting, different syntaxes are available for writing conditional statements depending on what you want to check—files, strings, numbers, or complex expressions. Let’s go through the main types:
This is the traditional way to write conditions in Bash and supports checks on files, strings, and numbers.
File Checks using a bash if statement
Used to determine properties of files. Let's use the -d flag to check whether a file is a directory instead of a symbolic link:
if [ -d myfolder ]; then
echo "The file is a directory."
Fi
String Comparisons using Bash if Statement:
Useful for testing if a string is empty or matches another string.
username="admin"
status="inactive"
if [ -n "$username" ]; then
echo "Username is provided."
fi
if [ "$status" != "active" ]; then
echo "Status is not active."
fi
Numeric Conditions using bash if statement:
Used to compare integers.
if [ $num -lt 10 ]; then
echo "Number is less than 10."
fi
Operators like -lt, -gt, -eq are used for comparisons.
This is an enhanced version of the single-bracket syntax with added features and flexibility.
Wildcard Matching:
Allows matching patterns using *, similar to wildcards.
if [[ "$text" == *match* ]]; then
echo "The string contains 'match'."
fi
Avoids Word Splitting:
You don’t need to quote variables with spaces—it handles them safely.
if [[ $phrase != "hello" ]]; then
echo "Phrase is not 'hello'."
fi
No Filename Expansion:
Patterns like *.sh aren't expanded into filenames. They're treated literally.
So a check like [[ -a *.sh ]] won’t work the same way it would outside double brackets.
Combining Conditions:
Logical operators like && and || can be used to combine multiple checks.
if [[ $num -eq 3 && $text == "yes" ]]; then
echo "Conditions are met."
fi
Regular Expressions:
Enables regex pattern matching using =~.
if [[ "$input" =~ ^[0-9]+$ ]]; then
echo "Input is a number."
fi
Designed specifically for numeric evaluations, this syntax resembles traditional programming languages.
Arithmetic Comparisons:
Used to evaluate numeric expressions with familiar symbols.
if (( num <= 6 )); then
echo "Number is 6 or less."
fi
Logical Operators Supported:
Supports && and ||, making compound conditions easier to read.
if (( num > 0 && num < 50 )); then
echo "Number is between 1 and 49."
fi
This syntax is essentially a cleaner and more expressive way to perform math-related logic in shell scripts.
Bash scripting provides multiple ways to handle decision-making. These tools let you control how your script behaves under different conditions. In this guide, we’ll explore common types of conditional statements, starting with the simplest and moving toward more advanced structures.
The basic if statement lets you check a condition and run certain commands only if the condition is true.
Syntax:
if [ condition ]; then
# commands to run if condition is true
fi
Example:
if [ -f "notes.txt" ]; then
echo "notes.txt exists in the directory."
fi
In this case, the script checks whether notes.txt exists as a regular file. If it does, it prints a message.
A nested if is simply an if statement placed inside another if block. This structure allows deeper decision trees where a second condition is only checked if the first is true.
Syntax:
if [ condition1 ]; then
if [ condition2 ]; then
# commands to run if both condition1 and condition2 are true
fi
fi
Example:
if [ -d "projects" ]; then
if [ -w "projects" ]; then
echo "The 'projects' directory exists and is writable."
fi
fi
Here, the script first checks if the projects directory exists, and then whether it has write permissions.
This construct lets you choose between two sets of actions: one for when a condition is true and another for when it’s false.
Syntax:
if [ condition ]; then
# if true
else
# if false
fi
Example:
if [ -n "$username" ]; then
echo "Hello, $username!"
else
echo "Username is not set."
fi
If the variable username has a value (i.e., is not empty), it prints a greeting. Otherwise, it displays a fallback message.
Use this when you need to evaluate multiple conditions in a sequence. As soon as one condition evaluates to true, the corresponding block is executed, and the rest are skipped.
Syntax:
if [ condition1 ]; then
# block 1
elif [ condition2 ]; then
# block 2
else
# fallback block
fi
Example:
if [ "$day" == "Monday" ]; then
echo "Start of the work week!"
elif [ "$day" == "Friday" ]; then
echo "Weekend is near!"
else
echo "It's just another day."
fi
Here, the script responds differently depending on what day it is.
The case structure is ideal when you want to perform different actions depending on a single variable’s value—similar to a switch statement in other programming languages.
Syntax:
case $variable in
pattern1)
# commands for pattern1
;;
pattern2)
# commands for pattern2
;;
*)
# default commands
;;
esac
Example:
read -p "Enter a letter grade: " grade
case $grade in
A)
echo "Excellent work!"
;;
B)
echo "Good job!"
;;
C)
echo "You passed."
;;
*)
echo "Unrecognized grade."
;;
esac
Depending on the value entered, the script echoes a different message. If the input doesn’t match any predefined grade, it prints a default response.
In this article, we explored the fundamentals of Bash if statements and their various forms, including nested structures and case-based decision-making. These tools can greatly enhance the clarity and flexibility of your Bash scripts, allowing you to build more dynamic and responsive command-line programs.
Is your business outgrowing the capabilities of a VPS? Upgrade to a dedicated server and unlock the full potential of your online operations. With BlueServers, you get a powerful, fully customizable hosting environment tailored to meet your performance demands. Enjoy the freedom of a dedicated infrastructure built for scalability, reliability, and complete control. Whether you're running high-traffic websites, resource-intensive applications, or managing sensitive data, our dedicated servers deliver the performance and security your business needs — all with unlimited traffic. Discover the difference a dedicated server can make. Explore our plans atBlueServers.com and take your infrastructure to the next level.
Start for free and unlock high-performance infrastructure with instant setup.
Your opinion helps us build a better service.