Disabling the Shell ( -n option)
The -n option, shot for noexec ( as in no execution), tells the shell to not run the commands. Instead, the shell just checks for syntax errors. This option will not convince the shell to perform any more checks. Instead the shell just performs the normal syntax check. With -n option, the shell doesn’t execute your commands, so you have a safe way to test your scripts if they contain syntax error.
The follow example shows how to use -n option.
Let us consider a shell script with a name debug_quotes.sh
#!/bin/bash
echo "USER=$USER
echo "HOME=$HOME"
echo "OSNAME=$OSNAME"
Now run the script with -n option
$ sh -n debug_quotes
debug_quotes: 8: debug_quotes: Syntax error: Unterminated quoted string
As the above outputs shows that there is syntax error , double quotes are missing.
Displaying the Scripts Commands ( -v option )
The -v option tells the shell to run in verbose mode. In practice , this means that shell will echo each command prior to execute the command. This is very useful in that it can often help to find the errors.
Let us create a shell script with the name “listusers.sh” with below contents
lpicentral@localhost:~$ cat listusers.sh
#!/bin/bash
cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt
awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
#Clean up the temporary file.
/bin/rm -f /tmp/users.txt
Now execute the script with -v option
lpicentral@localhost:~$ sh -v listusers.sh
#!/bin/bash
cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt
awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
guest-k9ghtA Guest,,,
guest-kqEkQ8 Guest,,,
guest-llnzfx Guest,,,
pradeep pradeep,,,
mail admin Mail Admin,,,
#Clean up the temporary file.
/bin/rm -f /tmp/users.txt
lpicentral@localhost:~$
In the above output , script output gets mixed with commands of the scripts. But however , with -v option , at least you get a better view of what the shell is doing as it runs your script.
Combining the -n & -v Options
We can combine the command line options ( -n & -v ). This makes a good combination because we can check the syntax of a script while seeing the script output.
Let us consider a previously used script “debug_quotes.sh”
lpicentral@localhost:~$ sh -nv debug_quotes.sh
#!/bin/bash
#shows an error.
echo "USER=$USER
echo "HOME=$HOME"
echo "OSNAME=$OSNAME"
debug_quotes: 8: debug_quotes: Syntax error: Unterminated quoted string
lpicentral@localhost:~$
Tracing Script Execution ( -x option )
The -x option, short for xtrace or execution trace, tells the shell to echo each command after performing the substitution steps. Thus , we can see the values of variables and commands. Often, this option alone will help to diagnose a problem.
In most cases, the -x option provides the most useful information about a script, but it can lead to a lot of output. The following example show this option in action.
lpicentral@localhost:~$ sh -x listusers.sh
+ cut -d :+ -f1,5,7 /etc/passwd
grep -v sbin
+ sort
+ grep sh
+ awk -F: { printf ( "%-12s %-40s\n", $1, $2 ) } /tmp/users.txt
guest-k9ghtA Guest,,,
guest-kqEkQ8 Guest,,,
guest-llnzfx Guest,,,
pradeep pradeep,,,
mail admin Mail Admin,,,
+ /bin/rm -f /tmp/users.txt
lpicentral@localhost:~$
In the above output, shell inserted a + sign in front of the commands.
0 comments:
Post a Comment