Shell调试篇 转
2024-08-24 07:52:03
检查语法
-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" <oldfile.sh > newfile.sh
或者一个更标准的方法,因为\r的ASCII码是\015,所以可以这样。
tr -d "\015" < oldfile.sh > newfile.sh
最新文章
- ES6笔记(5)-- Generator生成器函数
- Shader 简明入门教程
- Unity学习疑问记录之隐藏与显示物体
- HoloLens开发手记 - Unity之Gaze凝视射线
- OpenMP的调度
- hdu 5755(高斯消元——模线性方程组模板)
- 尝试Hexo
- PHP使用缓存生成静态页面
- C socket demo
- Python 学习日记(第二周)
- [工作问题总结]MyEclipse 打开项目
- Android——ExpandableListView事件拦截
- rails应用ajax之二:使用rails自身支持
- 服务创建&;删除
- openERP笔记,自定义开发模块
- django时区设置 media配置 日期截断函数 上传图片管理设计方案
- 03 自学Aruba之2.4GHz及5GHz无线信道
- 除了/etc/init.d/加启动脚本 或者在/etc/rc.local中加启动命令,还可以通过crontab来完成服务器重启后自动启动服务的操作
- nowcoder 211E - 位运算?位运算! - [二进制线段树][与或线段树]
- MFC 如何在一个类中使用在其他类中定义的变量或函数