Mastering 10 Essential Options of If Statement in Bash

LINUX
FUNDAMENTALS
A Complete Guide for Beginners Enroll Course Now

In Bash scripting, it’s very common to perform conditional tests and comparisons on variables, strings, files or directories. In this effort, Bash provides plenty of options to use with the ‘if’ statement. These options along with the ‘if’ statement help to control the flow of scripts by employing conditional executions based on numeric values, string values, file or directory properties, permissions etc.

In this article, I will discuss the 10 most useful options of the ‘if’ statement in Bash.

What is “if” Statement in Bash?

The ‘if’ statement in Bash is a basic control structure utilized for certain command executions according to specific conditions and performing different comparisons and checks. This conditional statement is generally used to evaluate if a condition is true or false. When a condition evaluates to true, it returns an exit status of zero (0) i.e. it means successful execution. On the contrary, when a condition evaluates to false, it returns a non-zero exit status i.e. it executes nothing.

10 Most Useful Options of the “if” Statement in Bash

The ‘if’ statement in Bash is employed for conditional execution. Several options with an ‘if’ statement determine the status of a file or directory. Some of the most frequently used options in Bash scripts are -s, -n, -f, -e, -d, -v, -z, -r, -w and -x. Here’s an overview of the most useful options for the ‘if’ statement in Bash:

1. Bash “If -s”

The “-s” option within an ‘if’ conditional statement in Bash is used to check if a file exists and has a size greater than zero i.e. whether it contains any content or not. If the condition is satisfied, the “-s” option returns a a zero exit status meaning that the file is not empty. Otherwise, the “-s” option returns nothing.

Now, consider a file having some contents inside:

# shop.txt
1. Laptop
2. Mouse
3. Keyboard

To check if a file exists and has a non-zero size (not empty) in Bash, check out the script below:

#!/bin/bash

file_name="shop.txt"

if [ -s "$file_name" ]; then
echo "The file '$file_name' is not empty."
fi

EXPLANATION

In the script, the if [ -s "$file_name" ]; syntax checks if the file exists and contains any text or data. If the file exists and is not empty, the script returns a true expression with an output message.

Checking if a file has a non-zero size i.e. if the file is non-empty using the '-s' operator in Bash

From the image, you can see that the file shop.txt in my system contains some content which means it is not empty.

Note: Make sure to insert the spaces between the single square brackets [ ] and a semicolon at the end of the brackets.

2. Bash “If -n”

The “-n” option in Bash is a string comparison operator that is used to check if a string variable is not empty i.e. if it contains a value with more than zero length. The syntax [ -n String ] with an ‘if’ statement is used to accomplish the conditional check. When the string contains one or more characters, it evaluates to true; otherwise, It returns nothing if the string is empty.

Here’s a Bash script to evaluate whether a string is not empty:

#!/bin/bash

my_string="Linuxsimply"

if [ -n "$my_string" ]; then
echo "The string is not empty."
fi

EXPLANATION

In the script, the if [ -n "$my_string" ]; syntax checks if the string has a length greater than zero. If the string has a non-zero length and is not empty, the script returns a true expression.

Checking if a string has a non-zero length i.e. if it is a non-empty string using the '-n' operator in Bash

As you can see from the image, the string variable contains the value ‘linuxsimply’ which is of non-zero length.

3. Bash “If -f”

The “-f” option in Bash checks if a file exists and if it is a regular file. A regular file in Bash is a specific type of file that includes text, data or pieces of programs. The syntax for using the “-f” option is [ -f FILE_NAME ].

To check if a file exists and is a regular file, use the “-f” test operator within an ‘if’ statement like the following script:

#!/bin/bash

if [ -f "linux.txt" ]; then
echo "The file 'linux.txt' exists."
fi

EXPLANATION

Here, the ‘if’ statement checks if the file exists and is a regular file. If the condition evaluates to true, the script executes ‘The file exists.’.

Checking if a file exists and is a regular file using the '-f' operator in Bash

In the image, you can see that in my system, the file linux.txt exists and it is a regular file.

4. Bash “If -e”

The “-e” option within the ‘if’ conditional statement in Bash is used to check the existence of a file or directory. If the specified files or directories exist in the filesystem, it evaluates to true; otherwise, it returns nothing.

Go through the following script to check if a specific file path exists in Bash:

#!/bin/bash

file_path="/home/nadiba/Documents/notice.txt" #Providing information in /path/to/file_name

if [ -e "$file_path" ]; then
echo "'notice.txt' exists"
fi

EXPLANATION

In the script, if [ -e "$file_path" ]; verifies whether the specific file exists in the specific path. If it exists, the script executes a true expression.

Checking if a file exists using '-e' operator in Bash

In the above image, you can see that the file notice.txt exists inside ‘/home/nadiba/Documents’ in my system.

5. Bash “If -d”

The “-d” option in Bash is used to check if a specified path exists and is a directory. Directories are folders that can contain multiple files or subdirectories. Use the syntax [ -d FILE_NAME ] with an ‘if’ statement to perform conditional tests on directories in Bash.

To verify the existence of a directory in Bash, you can follow the script below:

#!/bin/bash

directory_path="/home/nadiba/Desktop/Bash global variable" #Providing information in /path/to/directory

if [ -d "$directory_path" ]; then
echo "The directory exists."
fi

EXPLANATION

Here, the ‘if’ statement checks if the defined path corresponds to an existing directory. If the condition is satisfied, the script returns an exit status of zero implying success.

Checking if a directory exists using '-d' operator in Bash

This image represents that the mentioned directory Bash global variable exists inside ‘/home/nadiba/Desktop’ in my system.

Note: If you specify a directory name without quotes that has space in it, Bash interprets it as separate arguments and shows errors.

6. Bash “If -v”

The “-v” option is not directly related to conditional statements in Bash. It is generally used with the set command to enable the verbose mode displaying each command and its arguments before the execution. However, this option can be used indirectly within an ‘if’ statement to check if a variable is set or not in Bash by utilizing the syntax if [ -v FILE_NAME ];. Here’s a Bash script to evaluate whether a variable is set or assigned:

#!/bin/bash

#Declaring two variables
variable1="abc"
variable2=""

#Checking if variables are set
#For variable1
if [ -v variable1 ]; then
echo "'Variable1' is set with a non-empty string."
fi
#For variable2
if [ -v variable2 ]; then
echo "'Variable2' is set with an empty value."
fi

EXPLANATION

Here, if [ -v variable1 ]; and if [ -v variable2 ]; check if variable1 and variable2 are assigned or set with some values or not. If the conditions are satisfied, the script echoes the respective outputs employing the echo command.

Checking if a variable is set using '-v' operator in Bash

The above image depicts that variable1 and variable2 both variables are set as they are assigned with values like ‘abc’ and an empty string respectively.

7. Bash “If -z”

The “-z” option, a string comparison operator with an ‘if’ statement in Bash is used to check if a string variable is empty i.e. if it contains a value with zero length. In this effort, use the syntax [ -z String ] with the ‘if’ conditional statement to check null strings in Bash. If the string is empty, it returns true expression. However, if the string contains any value with non-zero length, it executes nothing.

Check the following script to verify if a string is empty in Bash:

#!/bin/bash

my_string=""

if [ -z "$my_string" ]; then
echo "The string is empty."
fi

EXPLANATION

In the script, if [ -z "$my_string" ]; evaluates whether ‘my_string’ string variable is empty. If it is empty, the script executes a true expression with an output message.

Checking if a string has zero length i.e. if it is empty using the '-z' operator in Bash

The above image states that the given string my_string contains a zero length value which is an empty string.

8. Bash “If -r”

In Bash scripting, the “-r” option is used within conditional statements to check if a file or directory has read permissions for the effective user ID (EUID) running the script. It’s commonly used with the test command (or [ ] construct) to assess file permissions.

The “-r” flag evaluates to true if the specified file or directory is readable by the user executing the script; otherwise, it returns nothing. Go through the script below to check if a file has read permission in Bash:

#!/bin/bash

file_name="color.txt"

#Checking if the file has read access
if [ -r "$file_name" ]; then
echo "The file '$file_name' is readable."
fi

EXPLANATION

In this script, if [ -r "$file_name" ]; verifies whether the file has read permission. If it has read permission, the script executes a true expression.

Checking if a file is readable using '-r' operator in Bash

In the image, you can see that the file color.txt in my system has read permission.

9. Bash “If -w”

The “-w” option within an ‘if’ statement in Bash is used to check if a file or directory has write permissions for the EUID. The basic syntax to accomplish the task is if [ -w FILE_NAME ];.

Check out the following Bash script to check if a file is writable:

#!/bin/bash

file_path="/home/nadiba/Pictures/animal.txt" #Providing information in /path/to/file_name

#Checking if the file has write access
if [ -w "$file_path" ]; then
echo "The file 'animal.txt' is writable."
fi

EXPLANATION

Here, if [ -w "$file_path" ]; evaluates if the file has writing access. If it is writable, the script executes a true expression with an output message.

Checking if a file is writable using '-w' operator in Bash

In the above snapshot, you can see that the file animal.txt inside ‘/home/nadiba/Pictures’ in my system has write permission.

10. Bash “If -x”

The “-x” option in Bash is used to check whether a file exists and has execute permissions for the user (the owner) running the script (without considering other users or group). This option in conjugation with the ‘if’ statement can be used to perform the conditional checks by utilizing the syntax if [ -x FILE_NAME ];.

Review the script below to check if a file exists and is executable:

#!/bin/bash

file_name="argument.sh"

#Checking if the file has execute permission
if [ -x "$file_name" ]; then
echo "The file '$file_name' is executable."
fi

EXPLANATION

Here, if [ -x "$file_name" ]; verifies whether the file has execution permission. If the file is executable, the script executes a true expression.

Checking if a file is executable using '-x' operator in Bash

In the above image, you can see that the file argument.sh in my system has execute permission.

Conclusion

All the options mentioned in the article provide flexible conditional checks within Bash scripts. By understanding the proper use of these options, you can enhance your scripts’ functionality and effectiveness.

People Also Ask

Can I combine multiple options within a single ‘if’ statement in Bash?

Yes, you can combine multiple options within a single ‘if’ statement in Bash by using logical operators such as && and ||. For example:

#!/bin/bash

file_name="example.txt"

if [ -e "$file_name" ] && [ -f "$file_name" ]; then
echo "The file '$file_name' exists and is a regular file."
fi

Can I toggle an option within an “if” statement using a flag in Bash?

Yes, you can toggle an option within an if statement using a flag or a variable in Bash by changing its state based on certain conditions. For example:

#!/bin/bash

#Setting a flag
option=false

#Toggling the flag
if [ condition ]; then
option=true #Enabling the option if the condition is satisfied
else
option=false #Disabling the option if the condition is not satisfied
fi

#Perform actions based on the toggled state of the flag
if [ "$option" = true ]; then
echo "Now, option is enabled."
else
echo "Now, option is disabled."
fi

Which Bash options can help in the process of debugging?

Bash provides several options to help in the debugging process such as ‘set -e’, ‘set -u’, ‘set -x’ etc. Using these options you can easily trace different commands, understand scripts’ behavior and identify functional errors.

What if I want to perform actions based on whether a symbolic link exists or not?

If you want to perform actions based on whether a symbolic link exists or not, you can combine the ‘-e’ option and the ‘-L’ option within an ‘if’ statement. For example:

#!/bin/bash

if [[ -e "/path/to/file_name" && -L "/path/to/file_name" ]]; then
echo "The file exists and is a symbolic link."
fi

Related Articles


<< Go Back to If Statement in Bash | Bash Conditional Statements | Bash Scripting Tutorial

Rate this post
Nadiba Rahman

Hello, This is Nadiba Rahman, currently working as a Linux Content Developer Executive at SOFTEKO. I have completed my graduation with a bachelor’s degree in Electronics & Telecommunication Engineering from Rajshahi University of Engineering & Technology (RUET).I am quite passionate about crafting. I really adore exploring and learning new things which always helps me to think transparently. And this curiosity led me to pursue knowledge about Linux. My goal is to portray Linux-based practical problems and share them with you. Read Full Bio

Leave a Comment