Difference between revisions of "Debug a script"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
m (Text replacement - "<source lang="bash">" to "<syntaxhighlight lang="bash" >")
m (Text replacement - "</source>" to "</syntaxhighlight>")
Line 4: Line 4:
  
 
You need to run a shell script with -x option from the command line itself:
 
You need to run a shell script with -x option from the command line itself:
<syntaxhighlight lang="bash" >bash -x script-name</source>
+
<syntaxhighlight lang="bash" >bash -x script-name</syntaxhighlight>
 
OR
 
OR
<syntaxhighlight lang="bash" >bash -xv script-name</source>
+
<syntaxhighlight lang="bash" >bash -xv script-name</syntaxhighlight>
 
You can also modify [[shebang]] line to run an entire script in debugging mode:
 
You can also modify [[shebang]] line to run an entire script in debugging mode:
 
<syntaxhighlight lang="bash" >#!/bin/bash -x
 
<syntaxhighlight lang="bash" >#!/bin/bash -x
Line 12: Line 12:
 
echo "Today is $(date)"
 
echo "Today is $(date)"
 
echo "Users currently on the machine, and their processes:"
 
echo "Users currently on the machine, and their processes:"
w</source>
+
w</syntaxhighlight>
 
==Use of set builtin command==
 
==Use of set builtin command==
 
Bash shell offers debugging options which can be turned on or off using set command.
 
Bash shell offers debugging options which can be turned on or off using set command.
Line 31: Line 31:
  
 
# Add more commands without debug mode
 
# Add more commands without debug mode
</source>
+
</syntaxhighlight>
  
 
Another example using set -n and set -o noexec:
 
Another example using set -n and set -o noexec:
Line 39: Line 39:
 
echo "This is a test"
 
echo "This is a test"
 
# no file is created as bash will only read commands but do not executes them  
 
# no file is created as bash will only read commands but do not executes them  
>/tmp/debug.txt</source>
+
>/tmp/debug.txt</syntaxhighlight>
  
 
==See also==
 
==See also==

Revision as of 22:50, 29 March 2016

← 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 turned 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:"

### 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 →