Shell 程序设计教程

«  Shell 自定义函数   ::   首页   ::   思考与实践  »

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

本部分介绍一些并不常用但也比较重要的内容。这里首先介绍 Shell 脚本的调试方法、文件包含以及简单的图形界面编程等内容,之后如果有新的内容,会在这里添加。

Shell 脚本调试方法

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

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

使用这些选项有三种方法:
(1)在命令行提供参数:

sh -x /script.sh

(2)在脚本开头提供参数:

#! /bin/bash -x

(3)在脚本中用 set 命令启用或禁用参数

#!/bin/bash

if [ -z "$1" ]; then
  set -x
  echo "ERROR: Insufficient Args."
  exit 1
  set +x
fi

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

Shell 文件包含

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

. filename

source filename

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

# filename:subscript.sh

url="http://kuanghy.github.io/"

主脚本如下:

#!/bin/bash

# Filename:
# Author: huoty <sudohuoty@163.com>
# Script starts from here:

. ./subscript.sh
echo $url

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

Shell 图形界面编程

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

«  Shell 自定义函数   ::   首页   ::   思考与实践  »