不懂博客—所知甚少因而建立此博客记录不懂知识;学习、关注、体验互联网。

如何在Linux下调试Bash Shell脚本的方法

来源:未知 作者:老黑 时间:2018-02-05 【 打印

新手写了一个 hello world 小脚本,如何能调试运行在 Linux 或者类 UNIX 的系统上的 bash shell 脚本呢?

这是 Linux / Unix 系统管理员或新用户最常问的问题。shell 脚本调试可能是一项繁琐的工作(不容易阅读)。调试 shell 脚本有多种方法。

您需要传递-x或-v参数,以在 bash shell 中浏览每行代码。

让我们看看如何使用各种方法调试 Linux 和 UNIX 上运行的脚本。

-x 选项来调试脚本

用 -x 选项来运行脚本:

    $ bash -x fcbu.com.sh

使用 set 内置命令

bash shell 提供调试选项,可以打开或关闭使用 set 命令:

    set -x : 显示命令及其执行时的参数。
    set -v : 显示 shell 输入行作为它们读取的

可以在 shell 脚本本身中使用上面的两个命令:

    #!/bin/bash
    # turn on debug mode
    set -x
    for f in *
    do
       file $f
    done
    # turn OFF debug mode
    set +x
    ls

在脚本的起始位置可以用以下代码调试:

    #!/bin/bash -xv

使用bash智能调试功能

首先添加一个叫做 _DEBUG 的特殊变量。当你需要调试脚本的时候,设置 _DEBUG 为 on:

在脚本的开头放置以下赋值和函数:

    _DEBUG="on"

    function DEBUG()
    {
     [ "$_DEBUG" == "on" ] &&  $@
    }

现在,只要你需要调试,只需使用 DEBUG 函数如下:

    DEBUG echo "File is $filename"

或者:

    DEBUG set -x
    Cmd1
    Cmd2
    DEBUG set +x

当调试完(在移动你的脚本到生产环境之前)设置 _DEBUG为off或非 'on' 的任何字符。不需要删除调试行。

示例脚本:

    #!/bin/bash
    _DEBUG="on"
    function DEBUG()
    {
     [ "$_DEBUG" == "on" ] &&  $@
    }
    DEBUG echo 'Reading files'
    for i in *
    do
      grep 'something' $i > /dev/null
      [ $? -eq 0 ] && echo "Found in $i file"
    done
    DEBUG set -x
    a=2
    b=3
    c=$(( $a + $b ))
    DEBUG set +x
    echo "$a + $b = $c"

保存并关闭文件。运行脚本如下输出:

    Reading files
    Found in xyz.txt file
    + a=2
    + b=3
    + c=5
    + DEBUG set +x
    + '[' on == on ']'
    + set +x
    2 + 3 = 5

现在设置 _DEBUG 为 off(你需要编辑该文件):

    _DEBUG="off"

运行脚本,输出:

    Found in xyz.txt file
    2 + 3 = 5

以上是一个简单但非常有效的技术。还可以尝试使用 DEBUG 作为别名而不是函数。

分类目录: | 标签:linux bash shell 脚本 调试
如何判断你的Linux服务器是否被入侵?