« 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 也可以包含外部脚本,即将外部脚本的内容合并到当前脚本。其包含脚本的方法有两种,即
“.”
和
“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 编程中,有一个工具可以提供简单的图形界面编程实现,即
zenity
。Zenity 只能提供一些简单的对话框,其实际是基于GTK+的一个对话框工具。。Zenity 主要对话框的列表包括日历、输入、报错、消息、文件选择、清单、通知、进展、问题、警告、比例和文字信息。
« Shell 自定义函数 :: 首页 :: 思考与实践 »