linux shell脚本调试技术

  linux shell解释器缺乏相应的调试机制和调试工具的支持。因此调试脚本的技术非常重要。

  与其他高级程序设计语言类似,shell脚本的错误分为两类:语法错误和逻辑错误。

  其中语法错误比较直观,我们只要定位到发生错误的代码段或行,发现产生错误的原因,再改正错误即可。常见的语法错误包括漏写关键字、漏写引号、空格符该有而未有、空格符不该有而有、变量大小写不区分等。

  逻辑错误则比较隐晦,它不影响脚本的正常执行,但是脚本运行的结果又与程序员的意愿不一致。因此逻辑错误的调试比语法错误的调试困难得多。

  linux shell脚本调试技术主要包含四种技巧:

  1、trap命令

        trap命令是linux的内建命令,它用于捕捉信号。trap命令可以指定收到某种信号时所执行的命令,其基本格式如下

          trap  command  sig1  sig2  sig3  ...   sigN

        shell脚本运行时会产生三个“伪信号”,利用trap命令捕捉这三个“伪信号”,并输出相关信息是shell脚本调试的一种重要技巧。

        shell伪信号及其产生条件

          EXIT:从函数中退出,或整个脚本执行完毕。

          ERR:当一条命令返回非0状态码,即命令执行不成功。

          DEBUG:脚本中的每一条命令执行之前。

  2、tee命令

        tee命令产生的数据流很像英文字母T,将一个输出分为两个支流,一个到标准输出,另一个到某输出文件。tee命令的这种特性可以用到shell脚本的管道及输入/输出重定向的调试上。基本格式如下

          command1  |  tee filename  |  command2   (原来的命令为:command1  |  command2)

          command1产生的输出经过tee处理后,一部分经过管道进入command2,一部分进入filename文件中。

  3、调试钩子

        调试钩子实际上是一个if/then结构的代码块,DEBUG变量控制该代码块是否执行。在程序的开发调试阶段,将DEBUG变量设置为TRUE,使其输出调试信息,到了程序交付使用阶段,将DEBUG设置为FALSE,关闭调试钩子,而无需一一删除调试钩子的代码(类似于高级语言中的调试模块语句)。调试钩子的格式如下

          if  [  "$DEBUG“  =  "TRUE"  ];then

              echo  "DEBUG information:"

               ...

          fi

        调试钩子的DEBUG是一个全局变量,在开发调试阶段,可利用export  DEBUG=TRUE,上述if/then结构便可执行。

  4、使用shell选项

        shell的调试选项、简写及其意义

          noexec    -n:读取脚本中的命令,进行语法检查,但不执行这些命令。(非常有用,避免需要做一些系统环境的恢复工作)

          xtrace    -x:在执行每个命令之前,将每个命令打印到标准输出。(非常有用,经常与trap  ...  DEBUG配合使用)

          无    -c  ...:从...中读取命令。(...最常见的是字符串)

        开启shell选项有两种方法,举例说明如下

          set  -n  (关闭set  +n)

          sh  -n  脚本名

        shell用于调试的内部变量及其意义

          LINENO:表示shell脚本的行号。

          FUNCNAME:数组变量,表示整个调用链上所有的函数名。

          PS4:设置-x选项的提示符,默认值是“+”符号。

        -c用法举例如下

          sh  -c  'a=2;b=2010;let c=$a*$b;echo "c=$c"'

 

以上是linux shell编程的主要调试技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值