linux中shell script的追踪与调试

Shell调试篇

  

sh [-nvx] scripts.shhtml

-n:不要执行script,仅查询语法的问题; shell

-v:在执行script前,先将script的内容输出到屏幕上;函数

-x:将使用到的script内容显示到屏幕上,这是颇有效的参数。post

 

检查语法

-n选项只作语法检查,而不执行脚本。url

sh -n script_name.sh

启动调试

sh -x script_name.sh

进入调试模式后,Shell依次执行读入的语句,产生的输出中有的带加号,有的不带,以下。带加号表示该条语句是Shell执行的。不带加号表示该语句是Shell产生的输出。spa

+ array=(1 2 3 4 5)
+ for i in '${array[*]}'
+ echo 1
1

中断调试

在调试过程当中能够按Ctrl + Z中断调试,观察结果,而后再按fg键继续调试便可。调试

调试代码块

上面的-x选项是调试整个脚本的,若是脚本很大,会很不方便,还有一种方法是调试某一块代码的,以下code

set -x
...
code block
...
set +x

这样,只对set -x与set +x之间的代码进行跟踪。htm

调试函数

set -x

Function call

set +x

常见错误诊断

xxx.sh: cannot shift

这种错误通常是参数传递有误,好比没有给参数,或者参数个数少了。由于shell脚本使用shift来获取下一个参数,若是个数不对,shift命令就会失败。blog

xxx.sh: ^M: not found

^M是Windows上的回车符\r在UNIX上的显示形式。这种状况多半是在Windows上编辑了shell脚本,而后拿到UNIX/Linux上执行。只要将文件中全部的\r删除便可。

tr -d "\r" <oldfile.sh > newfile.sh

或者一个更标准的方法,由于\r的ASCII码是\015,因此能够这样。

tr -d "\015" < oldfile.sh > newfile.sh
相关文章
相关标签/搜索