BASH DEBUGGING
Bash Script Debugging
• Debugging Bash scripts is an essential skill for any Linux or Unix system
administrator, developer, or power user.
• Debugging helps in identifying and fixing errors efficiently.
• Bash (Bourne Again Shell) is a powerful scripting language used for automat-
ing tasks, system administration, and more.
Print Statements
• Adding echo statements to your script can help you inspect variable values,
command outputs, and execution flow.
Example:
#!/bin/bash
# Debugging with print statements
echo "Starting script..."
echo "Current directory: $(pwd)"
Enable Debug Mode
• Bash provides a debug mode that allows you to trace the execution of a script
line by line.
• You can enable debug mode by adding the -x option to your script or setting
the set -x command within the script.
Example:
#!/bin/bash
set -x
# Your script commands go here
echo "Hello, World!"
• When you run the script with debug mode enabled (bash [Link]), each
line of the script will be printed to the terminal before execution, allowing you
to see the flow of execution and identify any issues.
1
Debugging on part(s) of the script
• Using the set Bash built-in you can run in normal mode those portions of the
script of which you are sure they are without fault, and display debugging
information only for troublesome zones.
• Say we are not sure what the somes commands (w) will do in the script, then
we could enclose it in the script like this:
#!/bin/bash
set -x # activate debugging from here
w
set +x # stop debugging from here
Debugging with Bashdb
• Bashdb is a powerful debugger for Bash scripts that allows you to set break-
points, step through code, inspect variables, and more.
• By using Bashdb’s commands, you can efficiently identify and fix issues in your
Bash scripts, making them more reliable and robust.
• Before you can start debugging with Bashdb, you need to install it on your
system.
Installation on Debian/Ubuntu:
sudo apt-get install bashdb
Installation on CentOS/RHEL:
sudo yum install bashdb
Example
• Let’s start with a simple Bash script and learn how to debug it using Bashdb.
#!/bin/bash
echo -n "Enter The Number: "
read -r a
fact=1
while [ "$a" -ne 0 ]; do
fact=$((fact * a))
a=$((a - 1))
done
echo $fact
2
Debugging
• To debug this script with Bashdb, follow these steps:
1. Open a terminal and navigate to the directory containing your script.
2. Run Bashdb with your script as an argument:
bashdb [Link]
3. You’ll enter the Bashdb debugger prompt ((bashdb)). Now you can use vari-
ous commands to control the debugging process.
Debugging Commands
• Here are some commonly used commands in Bashdb:
– run: Start executing the script.
– next or n: Execute the current line and move to the next line.
– step or s: Step into function calls.
– list or l: Show the current code context.
– break or b: Set a breakpoint at a specific line or function.
– delete or d: Delete a breakpoint.
– info breakpoints: Show information about breakpoints.
– print or p: Print the value of a variable.
– quit or q: Quit the debugger.
Example
• Let’s debug our example script step by step:
1. Start the debugger:
bashdb [Link]
2. Set a breakpoint at the factorial function:
(bashdb) break 1
Example
3. The debugger will stop at the beginning of the factorial function. Use the
list command to see the code:
(bashdb) list
4. Step through the function using the step command:
3
(bashdb) step
5. Use the print command to inspect the value of variables:
(bashdb) print $a
6. Continue stepping through the function until you reach the end.
7. Use the quit command to exit the debugger when you’re done.
References
• [Link]
• [Link]