调试选项

Shell提供了一些用于调试脚本的选项,如下所示:

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

使用这些选项有三种方法,一是在命令行提供参数

1
$ sh -x ./script.sh

二是在脚本开头提供参数

1
#! /bin/sh -x

第三种方法是在脚本中用set命令启用或禁用参数

1
2
3
4
5
6
7
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fi

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

利用 DEBUG 标志

仅当设置DEBUG标志时才打印调试信息。

1
2
3
4
5
6
7
8
9
function debug() {
if [[ $DEBUG ]]
then
echo ">>> $*"
fi
}
# For any debug message
debug "Trying to find config file"

还有单行debug函数:

1
2
function debug() { ((DEBUG)) && echo ">>> $*"; }
function debug() { [ "$DEBUG" ] && echo ">>> $*"; }

ShellCheck

shellcheck 是一个非常彪悍的开源 shell 语法检查工具,本身是使用 Haskell 编写的。它不仅可以帮助你检查出错误的语法,还可以提供一些有价值的优化建议。

有三种使用 ShellCheck 的方式:

  1. 在线运行 ShellCheck 的网页版
  2. 本地安装和运行 ShellCheck;
  3. 通过编辑器调用 ShellCheck ,目前支持 Vim 的 Syntastic 插件。

本地安装运行 ShellCheck

  • Arch 用户安装 ShellCheck:

1
$ yaourt -S shellcheck

之后可以执行 shellcheck <SCRIPT> 命令。其中 <SCRIPT> 是你要检查的 shell 脚本。截图如下:

本地执行 ShellCheck 工具

Comments