Difference between revisions of "Debug a script"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
Line 17: Line 17:
 
* set -x : Display commands and their arguments as they are executed.
 
* set -x : Display commands and their arguments as they are executed.
 
* set -v : Display shell input lines as they are read.
 
* set -v : Display shell input lines as they are read.
 +
* set -n : Read commands but do not execute them.  This may be used to check a shell script for syntax errors.
 
<source lang="bash">#!/bin/bash
 
<source lang="bash">#!/bin/bash
 
### Turn on debug mode ###
 
### Turn on debug mode ###
Line 32: Line 33:
 
# Add more commands without debug mode
 
# Add more commands without debug mode
 
</source>
 
</source>
 +
 +
Another example using set -n and set -o noexec:
 +
<source lang="bash">#!/bin/bash
 +
set -n # only read command but do not execute them
 +
set -o noexec
 +
echo "This is a test"
 +
# no file is created as bash will only read commands but do not executes them
 +
>/tmp/debug.txt</source>
 +
==See also==
 +
* [[Setting shell options]]
  
 
==External links==
 
==External links==

Revision as of 19:10, 20 October 2009

← Execute a scriptHomeChapter 2 Challenges →

You need to run a shell script with -x option from the command line itself:

bash -x script-name

OR

bash -xv script-name

You can also modify shebang line to run an entire script in debugging mode:

#!/bin/bash -x
echo "Hello ${LOGNAME}"
echo "Today is $(date)"
echo "Users currently on the machine, and their processes:"
w

Use of set builtin command

Bash shell offers debugging options which can be turn on or off using set command.

  • set -x : Display commands and their arguments as they are executed.
  • set -v : Display shell input lines as they are read.
  • set -n : Read commands but do not execute them. This may be used to check a shell script for syntax errors.
#!/bin/bash
### Turn on debug mode ###
set -x

# Run shell commands
echo "Hello ${LOGNAME}"
echo "Today is $(date)"
echo "Users currently on the machine, and their processes:"
w

### Turn OFF debug mode ###
set +x

# Add more commands without debug mode

Another example using set -n and set -o noexec:

#!/bin/bash
set -n # only read command but do not execute them
set -o noexec
echo "This is a test"
# no file is created as bash will only read commands but do not executes them 
>/tmp/debug.txt

See also

External links

← Execute a scriptHomeChapter 2 Challenges →