Linux拓展之调试脚本

调试完整脚本

如果要对 shell 脚本进行调试,可以通过 -x 选项来启用 shell 脚本的跟踪调试功能,可以打印出所执行的每一行命令及当前的状态。语法格式如下:

# 语法
bash -x 脚本名
# 或
sh -x 脚本名

# 示例
bash -x test.sh
sh -x test.sh

假设待调试的脚本 test.sh 内容如下:

#!/bin/bash

function print(){
    local start=$1
    local end=$2
    for i in $(seq $start $end); do
        echo "$i"
    done
}

print 1 6

调试结果如下,可以看到每一步各变量的值及输出结果:
在这里插入图片描述

调试部分脚本

上面的命令是对整个脚本进行调试输出的,如果只想要调试部分脚本。可以使用 set [-+]x 对脚本进行部分调试。其中 set -x 开启部分调试,set +x 关闭部分调试,即对调试区域进行限制。这语句必须添加在脚本中才会生效,例如:

#!/bin/bash

function print(){
    local start=$1
    local end=$2
    for i in $(seq $start $end); do
    	# 开启部分调试
    	set -x
        echo "$i"
        # 结束部分调试\
        set +x
    done
}

print 1 6

在这里插入图片描述

自定义调试脚本

上面两种调试方法都是 bash 内置的,它们以固定的格式生成调试信息。但是在很多情况下,我们需要使用自定义的调试信息。所谓的自定义调试脚本指的是什么时候输出调试信息,什么时候不输出调试信息,由我们调用脚本的人主动控制。

可以通过定义 _DEBUG 环境变量来启用或禁止调试及生成特定形式的信息。如例:

#!/bin/bash

# 自定义 DEBUG 函数,固定代码
function DEBUG() {
	[ "$_DEBUG" == "on" ] && $@ || :
}

for i in {1..6}; do
	# 在每一条打印调试信息语句前面加上 DEBUG,如果没有把  _DEBUG=on 传递给脚本,那么下面的调试信息就不会打印出来
	DEBUG echo "i is $i"
done

测试如下:
在这里插入图片描述

利用 shebang 调试

还可以利用 shebang 来进行调试,即将脚本第一行的 #!/bin/bash 改成 #!/bin/bash -xv,这样不用 bash -x 脚本名 就可以开启调试了。

还有一点需要注意,调试信息会在每一行前需要加上 + 符号,那么就很难在输出的调试信息中跟踪执行流程。所以可以将环境变量 PS4 设置为 '$LINENO:',显示每一行的行号。

所以 test.sh 脚本如下:

#!/bin/bash -xv

# 开启行号设置
PS4='$LINENO: '

function print(){
    local start=$1
    local end=$2
    for i in $(seq $start $end); do
        echo "$i"
    done
}

print 1 6

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值