博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell常用调试方法
阅读量:6429 次
发布时间:2019-06-23

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

检查语法

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

sh -n script_name.sh

启动调试

sh -x script_name.s

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

+ array=(1 2 3 4 5)

    + for i in '${array[*]}'
    + echo 1
    1

加上-v可将源码一起输出

中断调试

在调试过程中可以按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" <oldfile.sh > newfile.sh

 

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

 

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

 

 

 

转载于:https://www.cnblogs.com/Cherie/p/3309199.html

你可能感兴趣的文章
硬链接和链接(符号链接)
查看>>
Volley(2) 源码解读
查看>>
更新数据
查看>>
spring读取properties配置
查看>>
Oracle的体系结构(四)
查看>>
tornado+datatables分页
查看>>
集成 Kubernetes 与 Cloud Foundry,IBM自有一套
查看>>
精通Python爬虫从Scrapy到移动应用(文末福利)
查看>>
假如突然有了50块,你会做什么?
查看>>
Yii2.0中(Hash is invalid error)验证错误
查看>>
python
查看>>
UIApplication、AppDelegate、委托
查看>>
linux磁盘管理命令上
查看>>
1.11-变量有关内容
查看>>
基于VMware的超融合, 解析vSAN与SmartX ZBS 的优劣差异
查看>>
关于界面
查看>>
jQuery学习
查看>>
在javaee的三层结构中,为什么事物存在于业务层
查看>>
docker 2 section
查看>>
linux学习阶段性总结servers
查看>>