Bash if
Conditions: A Comprehensive Guide
This document explains how to use if
conditions in Bash scripting, covering common scenarios with examples.
1. Basic if
, else
, else if
(elif
)
Syntax:
if [ condition ]; then
# Code if condition is true
elif [ another_condition ]; then
# Code if another_condition is true
else
# Code if all conditions are false
fi
Example:
read -p "Enter a number: " num
if [ "$num" -gt 10 ]; then
echo "Greater than 10"
elif [ "$num" -eq 10 ]; then
echo "Exactly 10"
else
echo "Less than 10"
fi
2. if
with AND (&&
) / OR (||
) Conditions
Syntax:
-
AND (
&&
) → Both conditions must be true. -
OR (
||
) → At least one condition must be true.
Example:
age=25
name="Alice"
if [ "$age" -gt 18 ] && [ "$name" == "Alice" ]; then
echo "Welcome, Alice! You are an adult."
fi
if [ "$age" -lt 18 ] || [ "$name" == "Bob" ]; then
echo "You are either under 18 or named Bob."
fi
3. if
with Command Result Condition
Check if a command succeeds (exit 0
) or fails (exit non-zero
).
Example:
if grep -q "error" /var/log/syslog; then
echo "Error found in logs!"
else
echo "No errors found."
fi
# Check if a file exists
if [ -f "/etc/passwd" ]; then
echo "File exists."
fi
4. if
String Exists (or Not)
Check if a string is empty or non-empty.
Example:
str="Hello"
if [ -z "$str" ]; then
echo "String is empty."
elif [ -n "$str" ]; then
echo "String is not empty."
fi
# Check if a substring exists
if [[ "$str" == *"ell"* ]]; then
echo "Substring 'ell' found."
fi
5. if
Equal to Number (Numeric Comparison)
Use -eq
, -ne
, -gt
, -lt
, -ge
, -le
.
Example:
num=15
if [ "$num" -eq 15 ]; then
echo "Number is 15."
elif [ "$num" -lt 10 ]; then
echo "Number is less than 10."
fi
6. if
Not Exist (Negative Conditions)
Check if a file/directory does not exist or a condition is false.
Example:
file="/tmp/test.txt"
if [ ! -f "$file" ]; then
echo "File does not exist."
fi
if [ "$num" -ne 20 ]; then
echo "Number is not 20."
fi
7. Other Frequently Used if
Conditions
Condition | Example | Description |
---|---|---|
Check if directory exists | if [ -d "/path" ]; then |
True if directory exists |
Check if file is readable | if [ -r "$file" ]; then |
True if file has read permissions |
Check if variable is set | if [ -v "$var" ]; then |
True if variable exists |
Check if file is executable | if [ -x "/bin/bash" ]; then |
True if file is executable |
Check if string matches regex | if [[ "$str" =~ ^[A-Z] ]]; then |
True if string starts with uppercase |
Example:
dir="/etc"
if [ -d "$dir" ]; then
echo "$dir is a directory."
fi
if [[ "$USER" =~ ^root$ ]]; then
echo "You are root!"
fi
Summary Cheat Sheet
Condition Type | Syntax |
---|---|
Basic if-else
|
if [ cond ]; then ... fi |
AND (&& ) |
if [ cond1 ] && [ cond2 ]; then |
OR (` | |
Command Success | if cmd; then |
String Exists | if [ -n "$str" ]; then |
String Empty | if [ -z "$str" ]; then |
Number Comparison | if [ "$num" -eq 10 ]; then |
File Exists | if [ -f "$file" ]; then |
Directory Exists | if [ -d "$dir" ]; then |
Negative Condition | if [ ! cond ]; then |
Final Tips
✔ Always quote variables ("$var"
) to avoid word splitting.
✔ Use [[ ]]
for advanced string matching (supports ==
, =~
).
✔ Prefer -eq
for numbers, ==
for strings.