BASH的调试手段

BASH的调试手段

回波/打印(普通技)

打印一些变量,或者提示信息。这应该是一个通用的方法了。在BASH里,我们可以简单的用呼应,或者打印来输出一些日志,或者加一些loglevel来过滤一些日志。这里贴一下我平常用的函数:


_loglevel=2


死(){

,,回声“关键:1美元比;”祝辞,2

,,退出1

}


INFO () {

,,(美元_loglevel通用电气2],,回声”信息:1美元比;“祝辞,2

}


错误(){

,,(美元_loglevel通用电气1],,回声”错误:1美元比;“祝辞,2

}


这里的实现只是简单的加了一个loglevel,其实可以把日志输出到一个文件中,或者给日志加上颜色。比如:


#添加颜色(美元_loglevel通用电气1],,echo - e”\ [31 m错误:033 \ 033 [0 m 1美元比;”祝辞,2

#重定向到文件

[$ _loglevel通用电气1],,回声”错误:1美元比;“比;/var/log/xxx_log.美元BASHPID


设置- x(稀有技)

- x (xtrace)选项会导致BASH在执行命令之前,先把要执行的命令打印出来。这个选项对调试一些命令错误很有帮助。


有的时候,由于传进来的参数带有一些特殊字符,导致BASH解析时不是按照我们预想的进行。这个时候,把- x打开,就能在命令执行前,把扩展后的命令打印出来,比如基于前面写的函数:


设置- x

信息“这是一个信息log>”

错误”这是一个错误log>”

设置+ x


如果想全程打开xtrace,可以在执行脚本的时候加- x参数。


陷阱/bashdb(史诗技)

为了方便调试,BASH也提供了陷阱机制。这跟之前介绍的两种方法高级不少。我们可以利用陷阱这个内置命令来指定各个sigspec应该执行的命令.trap的具体用法如下:


[lp] [[arg] sigspec陷阱……)

sigspec包括中定义的各个信号,退出,呃,恢复和调试。


各个信号这里就不介绍了.EXIT会在壳退出时执行指定的命令。若当前壳中有命令执行返回非零值,则会执行与错相关联的命令。而返回是针对源和,每次执行都会触发返回陷阱。若绑定一个命令到调试,则会在每一个命令执行之前,都会先执行调试这个陷阱。这里要注意的是,错误和调试只在当前壳有效。若想函数和子壳自动继承这些陷阱,则可以设置- t(调试/返回)和e (ERR)。

比如,下面的脚本会在退出时,执行回声:


# !/bin/bash


陷阱”呼应,这是一个退出echo>”退出


回声”这是一个正常的echo>“


或者,让脚本中命令出错时,把相应的命令打印出来:

# !/bin/bash


陷阱的echo $ BASH_COMMAND返回犯错犯错


呼应这是一个正常的测试

UnknownCmd


亦或者,让脚本的命令单步执行:

# !/bin/bash


陷阱”(读- p”(0: LINENO美元)$ BASH_COMMAND ?祝辞”)的调试


呼应,这是一个测试


i=0

,(真正的)

,做,echo $ i

,,(+ +)

完成

BASH的调试手段