博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell调试
阅读量:5305 次
发布时间:2019-06-14

本文共 882 字,大约阅读时间需要 2 分钟。

转:http://www.cnblogs.com/softwaretesting/archive/2012/02/06/2339671.html

检查语法

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

sh -n script_name.sh

启动调试

sh -x script_name.sh

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

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

中断调试

在调试过程中可以按Ctrl + Z中断调试,观察结果,然后再按fg键继续调试即可。

调试代码块

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

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

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

调试函数

set -x Function call set +x

常见错误诊断

xxx.sh: cannot shift

这种错误一般是参数传递有误,比如没有给参数,或者参数个数少了。因为shell脚本使用shift来获取下一个参数,如果个数不对,shift命令就会失败。

xxx.sh: ^M: not found

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

tr -d "\r" 
newfile.sh

或者一个更标准的方法,因为\r的ASCII码是\015,所以可以这样。

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

设置调试陷阱

稍后继续。。。

==

转载于:https://www.cnblogs.com/DjangoBlog/p/5413059.html

你可能感兴趣的文章
Akka-Cluster(3)- ClusterClient, 集群客户端
查看>>
java中基本数据类型和包装类的区别
查看>>
项目指南
查看>>
康托展开
查看>>
JarvisOJ Basic Help!!
查看>>
MongoDB-CRUD
查看>>
ASM字节码增强技术
查看>>
javaagent 简介
查看>>
《Linux4.0设备驱动开发详解》笔记--第十四章:Linux网络设备驱动
查看>>
C++学习之智能指针
查看>>
python升级安装后的yum的修复
查看>>
答读者问(9):有关怎样看待学校的好坏及怎样应对毕业之前的迷茫等问题
查看>>
UVA 1664 Conquer a New Region (Kruskal,贪心)
查看>>
map/reduce函数
查看>>
第五式 单例模式
查看>>
UWP获取任意网页加载完成后的HTML
查看>>
SVN MERGE 和冲突
查看>>
uniqueidentifier 数据类型(转)
查看>>
Canvas学习笔记
查看>>
C语言-数据结构(一)
查看>>