检查语法

-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

最新文章

  1. ES6笔记(5)-- Generator生成器函数
  2. Shader 简明入门教程
  3. Unity学习疑问记录之隐藏与显示物体
  4. HoloLens开发手记 - Unity之Gaze凝视射线
  5. OpenMP的调度
  6. hdu 5755(高斯消元——模线性方程组模板)
  7. 尝试Hexo
  8. PHP使用缓存生成静态页面
  9. C socket demo
  10. Python 学习日记(第二周)
  11. [工作问题总结]MyEclipse 打开项目
  12. Android——ExpandableListView事件拦截
  13. rails应用ajax之二:使用rails自身支持
  14. 服务创建&amp;删除
  15. openERP笔记,自定义开发模块
  16. django时区设置 media配置 日期截断函数 上传图片管理设计方案
  17. 03 自学Aruba之2.4GHz及5GHz无线信道
  18. 除了/etc/init.d/加启动脚本 或者在/etc/rc.local中加启动命令,还可以通过crontab来完成服务器重启后自动启动服务的操作
  19. nowcoder 211E - 位运算?位运算! - [二进制线段树][与或线段树]
  20. MFC 如何在一个类中使用在其他类中定义的变量或函数

热门文章

  1. js-redux学习笔记
  2. CentOS7下安装caffe(包括ffmpeg\boost\opencv)
  3. SAP wonderful links
  4. vs中nuget命令的用法
  5. MySQL数据库封装和分页查询
  6. Postman&#160;Google浏览器离线安装Postman插件
  7. Ajax如何设置cookie
  8. iOS 开发多线程 —— GCD(1)
  9. 【Python】定时调度
  10. 【mongoDB运维篇③】replication set复制集