Introduction

Debugging is an important part of programming in any language, and so it is the same for Bash, one of the most easy way to debug is to run the program line by line.

This way you can check what is happening with each line, and you can then find where is the error.

Debugging shell scripts

If you are using bash, you can debug using this command

bash -x <program.sh>

This way bash will print each line and then execute it, this will help you to find any possible error.

Example:

Given this shell script

#!/bin/sh
echo 'This is an example'
df -h
free -m
echo 'this is the end'

If you run this with the -x parameter, you will have an output like this:

+ echo 'This is an example'
This is an example
+ df -h
Filesystem            Size  Used Avail Use% Mounted on
udev                   10M  172K  9.9M   2% /dev
/dev/sdb4              36G   20G   14G  59% /
none                  621M     0  621M   0% /dev/shm
/dev/sdb3             145M   15M  123M  11% /boot
/dev/sdb2              36G   28G  6.5G  81% /home
+ free -m
             total       used       free     shared    buffers     cached
Mem:          1240       1208         31          0        167        735
-/+ buffers/cache:        306        934
Swap:         1906          0       1906
+ echo 'this is the end'
this is the end

As you can see, each line starting with the ‘+’ sign is the command itself, then you have the output of that line.