您的位置:首页 > 运维架构 > Shell

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

2013-12-13 15:27 232 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: