shell不会对错误进行精确定位,而是在试图结束一个语句时进行错误统计。所以在shell打印出一个脚本错误后,不要只看那些疑问行,而是要观察整个相关代码段.
1.常见错误:
1.1循环错误
for、while、until、和case语句中的错误是指实际语句段不正确。或许你是忘记了一个保留字而引起的.
比如,fi,done等循环结束关键字。或者在for循环时忘记了在循环列表部分使用$符号。
eg:test.sh: line 6: 语法错误:不可预料的文件末尾
1.2引号漏写错误
此类错误的避免方案是确保在脚本中所有的引号成对出现。
eg:test.sh: line 3: 查找“"”的匹配字符时发现意外的EOF
test.sh: line 7: 语法错误:不可预料的文件末尾
1.3测试错误
即在使用test或[]测试条件时,选项两边的表达式类型不一致。
eg:test.sh: line 3: [: hh:此处需要整数表达式
1.4大小写不一致错误 避免此类错误的关键在于养成变量定义与调用时大小写类型一致的习惯。 2.echo调试工具
一般在可能出现错误的语句段前后使用echo命令,类似于c语言里使用printf函数检测错误.
3.set 命令
set -n 读命令但不执行
set -v 显示读取的所有行
set -x 显示所有的命令及其参数
将"-"更换为"+"即关闭相关选项
可在执行脚本时直接加选项即可;eg:$ bash -x test.sh
也可在脚本内使用;eg:
$ cat test.sh
#!/bin/bash
MYVAR=123
set -x
if [ "$MYVAR" -eq 123 ];then
echo $MYVAR
fi
set +x
exit 0
1.常见错误:
1.1循环错误
for、while、until、和case语句中的错误是指实际语句段不正确。或许你是忘记了一个保留字而引起的.
比如,fi,done等循环结束关键字。或者在for循环时忘记了在循环列表部分使用$符号。
eg:test.sh: line 6: 语法错误:不可预料的文件末尾
1.2引号漏写错误
此类错误的避免方案是确保在脚本中所有的引号成对出现。
eg:test.sh: line 3: 查找“"”的匹配字符时发现意外的EOF
test.sh: line 7: 语法错误:不可预料的文件末尾
1.3测试错误
即在使用test或[]测试条件时,选项两边的表达式类型不一致。
eg:test.sh: line 3: [: hh:此处需要整数表达式
1.4大小写不一致错误 避免此类错误的关键在于养成变量定义与调用时大小写类型一致的习惯。 2.echo调试工具
一般在可能出现错误的语句段前后使用echo命令,类似于c语言里使用printf函数检测错误.
3.set 命令
set -n 读命令但不执行
set -v 显示读取的所有行
set -x 显示所有的命令及其参数
将"-"更换为"+"即关闭相关选项
可在执行脚本时直接加选项即可;eg:$ bash -x test.sh
也可在脚本内使用;eg:
$ cat test.sh
#!/bin/bash
MYVAR=123
set -x
if [ "$MYVAR" -eq 123 ];then
echo $MYVAR
fi
set +x
exit 0