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 "\033[31m ERROR:\033[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 -x

INFO "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 test

UnknownCmd

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

#!/bin/bash

trap '(read -p "[$0 : $LINENO] $BASH_COMMAND ?>")' DEBUG

echo this is a test

i=0

while [ true ]

do

  echo $i

  ((i++))

done

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:BASH的调试手段-创新互联
文章转载:http://scyanting.com/article/dijdcs.html