如何在Linux中启用Shell脚本调试模式

在这个shell脚本调试系列中,我们将介绍如何启用shell脚本调试,解释不同的shell脚本调试模式以及如何使用

脚本只是存储在文件中的命令列表。代替通过在终端上一直一个接一个地键入命令来运行命令序列,系统用户可以将它们(命令)存储在文件中,并重复调用该文件以多次重新执行命令。 虽然学习脚本或者在写剧本的初期阶段,我们通常用命令的几行字写小或短的脚本开始。我们通常只通过查看它们的输出并确保它们按照我们的意图工作来调试这样的脚本。 然而,当我们开始写很长,高级脚本与数以千计的命令行中,修改系统设置,例如脚本, 通过网络进行关键备份,我们会认识到,只有在看脚本的输出不足以在脚本中找到错误。 因此,在Linux系列的这个shell脚本调试中,我们将介绍如何启用shell脚本调试,转到解释不同的shell脚本调试模式以及如何在后续系列中使用它们。

如何启动脚本

脚本是由它的第一行,即包含其他文件的杰出#! She-bang -定义文件类型)和 path name (路径解释器)它通知系统,该文件是命令,用于集合由指定的程序(解释器)解释。 以下是不同类型脚本中的“第一行”的示例:
#!/bin/sh          [For sh scripting]
#!/bin/bash        [For bash scripting] 
#!/usr/bin/perl    [For perl programming]
#!/bin/awk -f      [For awk scripting]   
:第一行或#!可以被省略如果脚本只包含了一组标准的系统命令,没有任何内部shell指令。

如何在Linux中执行Shell脚本

调用shell脚本的常规语法是:
$ script_name  argument1 ... argumentN
另一种可能的形式是通过明确指定将执行脚本的shell,如下所示:
$ shell script_name argument1 ... argumentN  
例如:
$ /bin/bash script_name argument1 ... argumentN     [For bash scripting]
$ /bin/ksh script_name argument1 ... argumentN      [For ksh scripting]
$ /bin/sh script_name argument1 ... argumentN       [For sh scripting]
对于剧本没有那个#!作为第一行,只包含基本的系统命令,如下面:
#script containing standard system commands
cd /home/$USER
mkdir tmp
echo "tmp directory created under /home/$USER"
只需使其可执行并运行如下:
$ chmod +x  script_name
$ ./script_name 

启用Shell脚本调试模式的方法

下面是主要的shell脚本调试选项:
  1. -v (简称详细) -告诉shell显示在脚本中的所有行,而他们阅读,它会激活详细模式。
  2. -n (简称NOEXEC或无ecxecution) -指示shell读取所有的命令,但是不执行它们。此选项激活语法检查模式。
  3. -x (简称X跟踪或执行跟踪) -告诉外壳,而他们正在执行的终端上显示所有的命令及其参数。此选项启用shell跟踪模式。

1.修改Shell脚本的第一行

第一种机制是通过改变shell脚本的第一行,如下所示,这将启用整个脚本的调试。
#!/bin/sh option(s)
在上面的形式中,option可以是上面的调试选项之一或组合。

2.使用调试选项调用Shell

第二种是通过调用具有调试选项的shell,如下所示,该方法还将打开整个脚本的调试。
$ shell option(s) script_name argument1 ... argumentN
例如:
$ /bin/bash option(s) script_name argument1 ... argumentN   

3.使用set Shell内置命令

第三种方法是使用set built-in命令调试shell脚本的给定部分,例如函数。这种机制很重要,因为它允许我们在shell脚本的任何段上激活调试。 我们可以打开下面的表单,其中选项是任何调试选项使用set命令调试模式。
$ set option 
要启用调试模式,请使用:
$ set -option
要禁用调试模式,请使用:
$ set +option
此外,如果我们在shell脚本的不同段中启用了几种调试模式,我们可以一次禁用所有调试模式,如:
$ set -
这就是现在启用shell脚本调试模式。正如我们所看到的,我们可以调试整个shell脚本或脚本的特定部分。 在接下来的两集这一系列中,我们将介绍如何使用shell脚本调试选项来解释详细语法检查跟踪Shell用实例的调试模式。 重要的是,不要忘记对本指南提出任何问题,或者通过下面的评论部分向我们提供反馈。在那之前,保持连接到Howtoing。