linux shell编程指南第二十三章------脚本调试

s h e l l编程最烦人的一项工作是调试问题。有一些方法可以借鉴,但是最好能在问题出现

前防止大部分错误,为此应遵循以下规则。

需要牢记的一点是当s h e l l打印出一个脚本错误后,不要只看那些疑问行。而是要观察整
个相关代码段。s h e l l不会对错误进行精确定位,而是在试图结束一个语句时进行错误统计。

循环错误
f o r、w h i l e、u n t i l和c a s e语句中的错误是指实际语句段不正确。也许漏写了固定结构中的
一个保留字。
下面错误打印信息d o n e,这是一个很好的线索。因为这时知道正在处理一个w h i l e语句。
回溯脚本段,检查w h i l e语句,是否漏写或错写了关键字,如d o或者正在使用的条件语句。

第二个典型错误是漏写引号错误。经常要注意这个问题,因为此错误经常出现。这里给
出解决这类错误的唯一方案是在脚本中确保所有引号成对出现。

当s h e l l打印出错误行后,通常在v i编辑器中查看文件。使用v i的set nu选项调试错误,先
进入v i,然后点击< E S C >键,后跟一冒号,再键入set nu <return>,这时给出文本行号,然后
进入s h e l l打印错误行。

另一个常见错误是在使用- e q语句时忘记在测试条件一边使用数字取值。
如果得到下列错误提示,通常是由于两件事情:需要在变量和方括号间加空格;在方括
号里漏写操作符。

[: missing ']'

经验上讲大多数错误是由于使用变量时大小写保持不一致。例如经常在开始定义时用大
写,然后在变量调用时用了小写字符,这样难免变量会没有赋值。


使用f o r循环时,有时会忘了在循环的列表部分用$符号,特别是在读取字符串时。


s e t命令可辅助脚本调试。以下是s e t命令常用的调试选项:
set -n 读命令但并不执行。
set -v 显示读取的所有行。
set -x 显示所有命令及其参数。
将s e t选项关闭,只需用+替代-。有人总认为+应该为开,而-应为关闭,但实际刚好相反。
可以在脚本开始时将s e t选项打开,然后在结束时关闭它。或在认为有问题的特殊语句段
前后打开及关闭它。
下面看一个例子。以下脚本将名字保存在变量列表中。用户输入名字, f o r循环循环变量
列表查看是否有匹配模式。注意这里在脚本开始时使用了set -x,并在结尾部分关闭它。

[root@localhost huangcd]# cat error
#!/bin/bash
set -x
LIST="Peter Susan John Barry Lucy Norman Bill Leslie"
echo -n "Enter your Name:"
read NAME
for LOOP in $LIST
do
  if [ "$LOOP" = "$NAME" ]
  then
    echo "you are on the list,"
    break
  fi
done
set +x

[root@localhost huangcd]# sh error
+ LIST='Peter Susan John Barry Lucy Norman Bill Leslie'
+ echo -n 'Enter your Name:'
Enter your Name:+ read NAME
Lucy
+ for LOOP in '$LIST'
+ '[' Peter = Lucy ']'
+ for LOOP in '$LIST'
+ '[' Susan = Lucy ']'
+ for LOOP in '$LIST'
+ '[' John = Lucy ']'
+ for LOOP in '$LIST'
+ '[' Barry = Lucy ']'
+ for LOOP in '$LIST'
+ '[' Lucy = Lucy ']'
+ echo 'you are on the list,'
you are on the list,
+ break
+ set +x




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值