网站搜索

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


脚本只是存储在文件中的命令列表。系统用户可以将所有命令(命令)存储在一个文件中,并多次重复调用该文件来重新执行命令,而不是通过在终端上逐个键入来运行一系列命令。

在学习脚本或编写脚本的早期阶段,我们通常从编写带有几行命令的小脚本或短脚本开始。我们通常只通过查看它们的输出并确保它们按我们的预期工作来调试此类脚本。

然而,当我们开始编写包含数千行命令的非常长且高级的脚本时,例如修改系统设置、通过网络执行关键备份等的脚本,我们将意识到仅查看脚本的输出是不够的。足以发现脚本中的错误。

因此,在Linux下的shell脚本调试系列中,我们将介绍如何启用shell脚本调试,并在后续系列中解释不同的shell脚本调试模式以及如何使用它们。

如何启动脚本

脚本与其他文件的区别在于它的第一行,其中包含一个 #!She-bang – 定义文件类型)和一个路径名(解释器的路径)它通知系统该文件是将由指定程序(解释器)解释的命令集合。

以下是不同类型脚本中“第一行”的示例:

#!/bin/sh          [For sh scripting]
#!/bin/bash        [For bash scripting] 
#!/usr/bin/perl    [For perl programming]
#!/bin/awk -f      [For awk scripting]   

注意:如果脚本仅包含一组标准系统命令,没有任何内部命令,则可以省略第一行或 #!外壳指令。

如何在 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. -n(noexec 或 no ecxecution 的缩写)——指示 shell 读取所有命令,但不执行它们。该选项激活语法检查模式。
  2. -x(xtrace 或执行跟踪的缩写)——告诉 shell 在执行时在终端上显示所有命令及其参数。该选项启用 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 内置命令来调试 shell 脚本的给定部分(例如函数)。这种机制很重要,因为它允许我们在 shell 脚本的任何段激活调试。

我们可以使用下面表格中的set命令打开调试模式,其中option是任何调试选项。

set option 

要启用调试模式,请使用:

set -option

要禁用调试模式,请使用:

set +option

此外,如果我们在 shell 脚本的不同段中启用了多种调试模式,我们可以立即禁用所有调试模式,如下所示:

set -

现在启用 shell 脚本调试模式就是这样。正如我们所看到的,我们可以调试整个 shell 脚本或脚本的特定部分。

在本系列的下两集中,我们将介绍如何使用 shell 脚本调试选项来解释详细语法检查shell 跟踪调试 带有示例的模式。

重要的是,不要忘记询问有关本指南的任何问题,或者通过下面的评论部分向我们提供反馈。在那之前,请保持与 Howtoing 的连接。