知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

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

发布时间:2014-09-05 13:34:29作者:知识屋

shell编程最烦人的一项工作是调试问题。有一些方法可以借鉴,但是最好能在问题出现前防止大部分错误,为此应遵循以下规则。

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

循环错误

for、while、until和case语句中的错误是指实际语句段不正确。也许漏写了固定结构中的一个保留字。

下面错误打印信息done,这是一个很好的线索。因为这时知道正在处理一个while语句。回溯脚本段,检查while语句,是否漏写或错写了关键字,如do或者正在使用的条件语句。

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

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

另一个常见错误是在使用-eq语句时忘记在测试条件一边使用数字取值。

如果得到下列错误提示,通常是由于两件事情:需要在变量和方括号间加空格;在方括号里漏写操作符。
[: missing ']'

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

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

set命令可辅助脚本调试。以下是set命令常用的调试选项:

set-n 读命令但并不执行。

set-v 显示读取的所有行。

set-x 显示所有命令及其参数。

将s e t选项关闭,只需用+替代-。有人总认为+应该为开,而-应为关闭,但实际刚好相反。可以在脚本开始时将s e t选项打开,然后在结束时关闭它。或在认为有问题的特殊语句段前后打开及关闭它。

下面看一个例子。以下脚本将名字保存在变量列表中。用户输入名字, for循环循环变量列表查看是否有匹配模式。注意这里在脚本开始时使用了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

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜