如何在 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]
注意#!
:如果脚本仅包含一组标准系统命令,而没有任何内部 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 脚本调试选项:
-v
(verbose 的缩写)—— 告诉 shell 在读取脚本时显示所有行,它会激活详细模式。-n
(noexec 或 no ecxecution 的缩写)– 指示 shell 读取所有命令,但不执行它们。此选项激活语法检查模式。-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 跟踪调试模式。
重要的是,不要忘记询问有关本指南的任何问题,或者通过下面的评论部分向我们提供反馈。在此之前,请继续关注示例。