[关闭]
@Chiang 2020-02-02T20:49:09.000000Z 字数 1064 阅读 613

Shell 脚本调试方法和文件包含

Linux Shell


Shell 脚本调试方法

在编写shell脚本时,shell提供了一些用于调试的选项:

  • -n 读一遍脚本的命令但不执行,用于检查脚本中的错误。
  • -v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
  • -x 提供跟踪执行信息,将执行的每一条命令和结果一次打印出来。

使用这些选项有三种方法:

  • 在命令行提供参数:
  1. sh -x /script.sh
  • 在脚本开头提供参数:
  1. #! /bin/bash -x
  • 在脚本中用 set 命令启用或禁用参数
  1. #!/bin/bash
  2. if [ -z "$1" ]; then
  3. set -x
  4. echo "ERROR: Insufficient Args."
  5. exit 1
  6. set +x
  7. fi

set -x 和 set +x 分别表示启用和禁用 -x 参数,这样可以只对脚本中的某一段进行跟踪调试。

Shell 文件包含

像其他语言一样,Shell 也可以包含外部脚本,即将外部脚本的内容合并到当前脚本。其包含脚本的方法有两种,即 “.” 和 “source” :

  1. . filename

  1. source filename

例如先创建一个名为 subscript.sh 的脚本,然后再在其他脚本中包含它:

  1. # filename:subscript.sh
  2. url="http://kuanghy.github.io/"

主脚本如下:

  1. #!/bin/bash
  2. # Filename:
  3. # Author: huoty <sudohuoty@163.com>
  4. # Script starts from here:
  5. . ./subscript.sh
  6. echo $url

被包含脚本不需要有执行权限,只保持主脚本有执行权限即可。其实这种文件包含的内容在之前的内容中我们已经提到过,只不过不是用来解决文件包含的问题。之前我们谈到过,Shell 在执行脚本时是另外开启一个子进程来执行的,所以想要让脚本的内容在当前 shell 中执行,则需要用 “.” 或 “source” 来执行脚本。其实这这两者的含义是一样的,所谓的让脚本内容在当前 shell 执行,也就是将脚本文件的内容包含到当前 shell 来执行,其实质都是文件包含。

Shell 图形界面编辑

在 Shell 编程中,有一个工具可以提供简单的图形界面编程实现,即 zenity 。Zenity 只能提供一些简单的对话框,其实际是基于GTK+的一个对话框工具。。Zenity 主要对话框的列表包括日历、输入、报错、消息、文件选择、清单、通知、进展、问题、警告、比例和文字信息。


参考资料:
Shell 程序设计教程

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注