Understanding the 'if' Command in Shell Scripting (with examples)
The if
command in shell scripting is a fundamental construct used for conditional execution of commands. It allows scripts to branch based on the outcome of a condition, making it possible to execute different commands depending on whether a condition is met. In shell scripting, the exit status of a command is critical; if it returns zero, it generally indicates success, while a non-zero status indicates failure. This behavior is central to how if
statements operate in a shell environment.
Use case 1: Execute the specified commands if the condition command’s exit status is zero
Code:
if condition_command; then echo "Condition is true"; fi
Motivation:
In scripting, you often need the script to take action only if a certain condition is met successfully. For instance, if a file download completes successfully (exit status zero), you might want to process the file immediately.
Explanation:
if condition_command;
: Theif
checks the exit status ofcondition_command
. If it is zero, the command within thethen
block is executed.then echo "Condition is true";
: This command is executed ifcondition_command
completes successfully.fi
: Ends theif
block.
Example Output:
Condition is true
Use case 2: Execute the specified commands if the condition command’s exit status is not zero
Code:
if ! condition_command; then echo "Condition is true"; fi
Motivation:
Sometimes, you need the script to perform an action only if a command fails. For example, if a file deletion fails, the script might need to alert the user or log an error.
Explanation:
if ! condition_command;
: The!
operator negates the condition, checking for a non-zero exit status, indicating a failure.then echo "Condition is true";
: This will execute ifcondition_command
fails.fi
: Marks the end of theif
statement.
Example Output:
Condition is true
Use case 3: Execute the first specified commands if the condition command’s exit status is zero otherwise execute the second specified commands
Code:
if condition_command; then echo "Condition is true"; else echo "Condition is false"; fi
Motivation:
This use case is prevalent when you need to provide an alternative result or fallback action, such as confirming whether a service started correctly or reverting changes if it didn’t.
Explanation:
if condition_command;
: Tests whethercondition_command
succeeds.then echo "Condition is true";
: Executes if the condition is met (exit status is zero).else echo "Condition is false";
: Executes if the condition fails (exit status is not zero).fi
: Ends the entireif-else
construct.
Example Output:
Condition is true
or
Condition is false
Use case 4: Check whether a [f]ile exists
Code:
if [[ -f path/to/file ]]; then echo "Condition is true"; fi
Motivation:
Checking for file existence is a common prerequisite for operations like reading a file, deleting a file, or performing file-based tasks. Ensuring that a file exists before attempting such operations can prevent errors.
Explanation:
if [[ -f path/to/file ]];
: The-f
operator checks if the specified path is a regular file.then echo "Condition is true";
: Executes if the file exists.fi
: Concludes theif
statement.
Example Output:
Condition is true
Use case 5: Check whether a [d]irectory exists
Code:
if [[ -d path/to/directory ]]; then echo "Condition is true"; fi
Motivation:
Before performing operations like changing directories, creating files within a directory, or removing a directory, it is prudent to check for directory existence to avoid unexpected errors and behaviors.
Explanation:
if [[ -d path/to/directory ]];
: Uses the-d
operator to check if the specified path is a directory.then echo "Condition is true";
: Executes if the directory exists.fi
: Ends theif
statement.
Example Output:
Condition is true
Use case 6: Check whether a file or directory [e]xists
Code:
if [[ -e path/to/file_or_directory ]]; then echo "Condition is true"; fi
Motivation:
This check is especially useful in generalized scripts where the existence of a file or directory needs to be verified, regardless of its type, before taking subsequent actions.
Explanation:
if [[ -e path/to/file_or_directory ]];
: The-e
operator is used to check whether the specified path denotes a file or directory.then echo "Condition is true";
: Runs if any file or directory exists at the specified path.fi
: Closures theif
block.
Example Output:
Condition is true
Use case 7: Check whether a variable is defined
Code:
if [[ -n "$variable" ]]; then echo "Condition is true"; fi
Motivation:
Determining whether a variable has been defined and holds a non-null value is crucial, especially when the variable is intended to be used in calculations, string operations, or as parameters for commands.
Explanation:
if [[ -n "$variable" ]];
: The-n
test checks if the variable contains a non-zero length value.then echo "Condition is true";
: Executes if the variable is defined and not empty.fi
: Ends theif
construct.
Example Output:
Condition is true
Use case 8: List all possible conditions (test
is an alias to [
; both are commonly used with if
)
Code:
man [
Motivation:
The vast number of condition checks available can sometimes be overwhelming. Consulting the manual page helps in understanding and using correctly the multitude of test conditions.
Explanation:
man [
: Opens the manual for the[
command (alias fortest
), providing a comprehensive list of file, string, and integer operators used within conditions.
Example Output:
This command displays the manual page content in the user’s terminal, listing all available test
conditions and usage examples.
Conclusion:
The if
command is vital in shell scripting, enabling scripts to make decisions based on different conditions. From checking file existence to variable states, it allows for robust and dynamic scripting. Understanding its syntax and use cases is essential for effective shell scripting and automation tasks.