shell脚本调试中打开set选项

设置调试选项概览

短符号 长符号 结果
set -f set -o noglob 禁止特殊字符用于文件名扩展。
set -v set -o verbose 打印读入shell的输入行。
set -x set -o xtrace 执行命令之前打印命令。

我们在调试shell脚本的时候,不可以避免的会遇到问题,这个时候,假如我们可以跟踪到脚本到底是哪里问了问题,是哪个变量出了问题,这样就对我们的调试是很有帮助的,这里介绍一个shell里面的跟踪选项这里介绍的是set命令,假设在脚本里面加入set –x ,就能显示脚本运行是的冗余输出,如果在脚本文件中加入了命令set –x ,那么在set命令之后执行的每一条命令以及加载命令行中的任何参数都会显示出来,每一行都会加上加号(+),提示它是跟踪输出的标识,在子shell中执行的shell跟踪命令会加2个叫号(++)。

下面来看看演示脚本:

<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   1:  </span>[root@centos6 shell]# cat set-x.sh
   2:  #!/bin/bash
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   3:  </span>#set -x
   4:  echo -n "Can you write device drivers?"
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   5:  </span>read answer
   6:  answer=$(echo $answer | tr [a-z] [A-Z])
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   7:  </span><span class="kwrd" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(0, 0, 255); background-color: transparent;">if</span> [ $answer = Y ]
   8:  then
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   9:  </span>        echo <span class="str" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(0, 96, 128); background-color: transparent;">"Wow,you must be very skilled"</span>
  10:  else
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  11:  </span>        echo <span class="str" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(0, 96, 128); background-color: transparent;">"Neither can I,I am just an example shell script"</span>
  12:  fi
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  13:  </span>[root@centos6 shell]# sh set-x.sh
  14:  Can you write device drivers?y
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  15:  </span>Wow,you must be very skilled
  16:  [root@centos6 shell]# sh set-x.sh
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  17:  </span>Can you write device drivers?n
  18:  Neither can I,I am just an example shell script
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  19:  </span>[root@centos6 shell]#

 

上面的脚本内容里面,我吧set –x  这一行注释掉了,我们平时都是看到这种效果,下面我将把set –x 这个选项打开,来看看效果:

<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   1:  </span>[root@centos6 shell]# sh set-x.sh
   2:  + echo -n 'Can you write device drivers?'
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   3:  </span>Can you write device drivers?+ read answer
   4:  y
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   5:  </span>++ echo y
   6:  ++ tr '[a-z]' '[A-Z]'
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   7:  </span>+ answer=Y
   8:  + '[' Y = Y ']'
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">   9:  </span>+ echo <span class="str" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(0, 96, 128); background-color: transparent;">'Wow,you must be very skilled'</span>
  10:  Wow,you must be very skilled
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  11:  </span>[root@centos6 shell]# sh set-x.sh
  12:  + echo -n 'Can you write device drivers?'
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  13:  </span>Can you write device drivers?+ read answer
  14:  n
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  15:  </span>++ echo n
  16:  ++ tr '[a-z]' '[A-Z]'
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  17:  </span>+ answer=N
  18:  + '[' N = Y ']'
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  19:  </span>+ echo <span class="str" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(0, 96, 128); background-color: transparent;">'Neither can I,I am just an example shell script'</span>
  20:  Neither can I,I am just an example shell script
<span class="lnum" style="padding: 0px; margin: 0px; border: 0px; font-size: 13px; color: rgb(96, 96, 96); background-color: transparent;">  21:  </span>[root@centos6 shell]#

 嘿嘿,看到了吧,每一行都显示出来,每一个参数的状态和执行到哪一步的值是多少,都可以看的很清楚了吧,我们可以很清楚的看到answer这个变量的每一步的状态和值,如果感兴趣,来试验下吧,这个选项

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值