Error Handling in Shell Scripting

Hi there! I'm Ojas Jawale, a passionate Cloud, DevOps and Cyber Security enthusiast. I love to dive into the latest new technologies and sharing my journey through blog. I'm always eager to learn and grow in this ever-evolving field of DevOps and Cyber Security. You'll find me writing about CI/CD pipelines, automation, containerization with Docker, and other exciting tech topics related to software quality and deployment. My goal is to demystify complex DevOps and Cyber Security concepts, provide practical tips on automation and testing, and inspire others in the developer and operations community. Let's connect, learn, and build amazing, high-quality software together!
Task 1 : Checking Exit Status
Q. Write a script that attempts to create a directory and checks if the command was successful. If not, print an error message.
#!/bin/bash
# User input to create directory
read -p "Enter directory that you want to create: " dir
# Create directory
mkdir $dir
# Check if previous command executed or not
if [ $? -ne '0' ]; then
echo "Sorry :( Failed to create directory $dir"
exit 1
else
echo "Directory '$dir' created successfully:)"
fi
# Output
linux$ ./Create_Dir.sh
Enter directory that you want to create: Demo_Directory
Directory 'Demo_Directory' created successfully:)
linux$ ./Create_Dir.sh
Enter directory that you want to create: Demo_Directory
mkdir: cannot create directory ‘Demo_Directory’: File exists
Sorry :( Failed to create directory Demo_Directory
Task 2 : Using
ifStatements for Error CheckingQ. Modify the script from Task 1 to include more commands (e.g., creating a file inside the directory) and use
ifstatements to handle errors at each step.
#!/bin/bash
# User input to create file
read -p "Enter filename with absolute path that you want to create: " file
# Create file
touch $file
# Check if previous command executed or not
if [ $? -ne '0' ]; then
echo "Sorry :( Failed to create file $file"
exit 1
else
echo "File '$file' created successfully:)"
fi
linux$ ./Create_file.sh
Enter filename with absolute path that you want to create: /home/shuhari/linux/demo.txt
File '/home/shuhari/linux/demo.txt' created successfully:)
Task 3 : Using
trapfor CleanupQ. Write a script that creates a temporary file and sets a
trapto delete the file if the script exits unexpectedly.
#!/bin/bash
# Create a temporary file
TEMP_FILE=$(mktemp)
# Ensure the temporary file is deleted upon script exit
trap "rm -f $TEMP_FILE" EXIT
echo "Temporary file created: $TEMP_FILE"
# Simulate some operations
echo "Performing some operations..."
sleep 3
# Simulate an unexpected exit
echo "Simulating an unexpected exit..."
exit 1
# Normal script exit point (this won't be reached due to the simulated exit)
echo "Script completed successfully."
# Output
linux$ ./trap.sh
Temporary file created: /tmp/tmp.BQqhnnNvlk
Performing some operations...
Simulating an unexpected exit...
Refer more for trap command.
Task 4 : Redirecting Errors
Q. Write a script that tries to read a non-existent file and redirects the error message to a file called
error.log.
#!/bin/bash
# Declare variables for file and error.log
read -p "Enter file name that your want to read: " file
error_file="error.log"
# Attempt to read non_existing file and redirect error message to error.log
cat "$file" 2> "$error_file"
# Check is error was logged?
if [ -s "$error_file" ]; then
echo "An error occurred. Check $error_file for details."
else
echo "File read successfully."
fi
# Output
linux$ ls
Create_Dir.sh Create_file.sh redirect_errors.sh trap.sh
/linux$ ./redirect_errors.sh
Enter file name that your want to read: demoFile.txt
An error occurred. Check error.log for details.
linux$ ls
Create_Dir.sh Create_file.sh error.log redirect_errors.sh trap.sh
linux$ cat error.log
cat: demoFile.txt: No such file or directory
-----------------------------------------------------------------------------
linux$ ls
Create_Dir.sh Create_file.sh redirect_errors.sh temp.txt trap.sh
linux$ ./redirect_errors.sh
Enter file name that your want to read: temp.txt
This is tempFile
File read successfully.
Task 5 : Creating Custom Error Messages
Q. Modify one of the previous scripts to include custom error messages that provide more context about what went wrong.
#!/bin/bash
# Prompt the user for the file name to read
read -p "Enter the file name you want to read: " file
error_file="error.log"
# Attempt to read the specified file and redirect error messages to error.log
cat "$file" 2> "$error_file"
# Check if an error was logged
if [ -s "$error_file" ]; then
# Check specific error conditions
if [ ! -f "$file" ]; then
echo "Error: The file '$file' does not exist."
# Check if file have read permission or not
elif [ ! -r "$file" ]; then
echo "Error: Permission denied. Unable to read the file '$file'."
else
echo "An unknown error occurred. Check $error_file for details."
fi
else
echo "File '$file' read successfully."
fi
# Output
linux$ ls
adv_errors.sh Create_Dir.sh Create_file.sh demo.xtxt redirect_errors.sh trap.sh
linux$ ./adv_errors.sh
Enter the file name you want to read: file.txt
Error: The file 'file.txt' does not exist.
linux$ ls
adv_errors.sh Create_Dir.sh Create_file.sh demo.xtxt error.log redirect_errors.sh trap.sh
linux$ cat error.log
cat: file.txt: No such file or directory
linux$ ./adv_errors.sh
Enter the file name you want to read: demo.xtxt
Hii
File 'demo.xtxt' read successfully.
linux$ cat error.log
linux$
Connect me
Follow me for more amazing content :)




