BASH 的调试手段


BASH 的调试手段
echo/print (普通技)打印一些变量,或者提示信息。这应该是一个通用的方法了。在 BASH 里,我们可以简单的用 echo,或者 print 来输出一些 log,或者加一些 loglevel 来过滤一些 log。这里贴一下我平常用的函数:
_loglevel=2
DIE() { echo “Critical: $1>” >&2 exit 1}
INFO() { [ $_loglevel -ge 2 ] && echo “INFO: $1>” >&2}
ERROR() { [ $_loglevel -ge 1 ] && echo “ERROR: $1>” >&2}
这里的实现只是简单的加了一个 loglevel,其实可以把 log 输出到一个文件中,或者给 log 加上颜色。比如:
# add color[ $_loglevel -ge 1 ] && echo -e “33[31m ERROR:33[0m $1>” >&2# redirect to file[ $_loglevel -ge 1 ] && echo “ERROR: $1>” > /var/log/xxx_log.$BASHPID
set -x (稀有技)-x(xtrace) 选项会导致 BASH 在执行命令之前,先把要执行的命令打印出来。这个选项对调试一些命令错误很有帮助。
有的时候,由于传进来的参数带有一些特殊字符,导致 BASH 解析时不是按照我们预想的进行。这个时候,把 -x 打开,就能在命令执行前,把扩展后的命令打印出来。比如基于前面写的函数:
set -xINFO “this is a info log>”ERROR “this is a error log>”set +x
如果想全程打开 xtrace,可以在执行脚本的时候加 -x参数。
trap/bashdb (史诗技)为了方便调试,BASH 也提供了陷阱机制。这跟之前介绍的两种方法高级不少。我们可以利用 trap 这个内置命令来指定各个 sigspec 应该执行的命令。trap 的具体用法如下:
trap [-lp] [[arg] sigspec …]sigspec 包括 中定义的各个 signal, EXIT,ERR,RETURN 和 DEBUG。
各个 signal 这里就不介绍了。EXIT 会在 shell 退出时执行指定的命令。若当前 shell 中有命令执行返回非零值,则会执行与 ERR 相关联的命令。而 RETURN 是针对 source和 .,每次执行都会触发 RETURN 陷阱免费云主机域名。若绑定一个命令到 DEBUG,则会在每一个命令执行之前,都会先执行 DEBUG 这个 trap。这里要注意的是,ERR 和 DEBUG 只在当前 shell 有效。若想函数和子 shell 自动继承这些 trap,则可以设置 -T(DEBUG/RETURN) 和 -E(ERR)。比如,下面的脚本会在退出时,执行echo:
#!/bin/bash
trap “echo this is a exit echo>” EXIT
echo “this is a normal echo>”
或者,让脚本中命令出错时,把相应的命令打印出来:#!/bin/bash
trap ‘echo $BASH_COMMAND return err’ ERR
echo this is a normal testUnknownCmd
亦或者,让脚本的命令单步执行:#!/bin/bash
trap ‘(read -p “[$0 : $LINENO] $BASH_COMMAND ?>”)’ DEBUG
echo this is a test
i=0while [ true ]do echo $i ((i++))done

相关推荐: 76、交换机配置实验之VACL

1、交换机数据转发流程解析2、实验拓扑3、配置基于IP的VACL3560配置access-list 1 permit 192.168.120.210vlan acces免费云主机域名s-map VACL 10action dropmatch ip addres…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/01 19:06
下一篇 02/01 19:16