
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;: Theifchecks the exit status ofcondition_command. If it is zero, the command within thethenblock is executed.then echo "Condition is true";: This command is executed ifcondition_commandcompletes successfully.fi: Ends theifblock.
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_commandfails.fi: Marks the end of theifstatement.
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_commandsucceeds.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-elseconstruct.
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-foperator checks if the specified path is a regular file.then echo "Condition is true";: Executes if the file exists.fi: Concludes theifstatement.
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-doperator to check if the specified path is a directory.then echo "Condition is true";: Executes if the directory exists.fi: Ends theifstatement.
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-eoperator 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 theifblock.
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-ntest 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 theifconstruct.
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.
