运维界的卡乐咪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、Shell脚本的调试

  1.1、学习脚本开发规范

  1.2、好的编码习惯

2、常见脚本错误范例

  2.1、if条件句缺少if结尾关键字

   1 #!/bin/sh
    2 read -p "pls input two num" num1 num2
    3 if [ $num1 -lt $num2 ];then
    4         echo "Yes,$num1 is less than $num2"
    5 elif [ $num1 -gt $num2 ];then
    6         echo "Yes,$num1 is gt than $num2"
    7 else
    8         echo "$num1 equal $num2"

  if_debug-1.sh:行9: 语法错误: 未预期的文件结尾
  2.2、循环结构中缺少关键字,如if缺少then、case缺少;;、while或for确定do或done

  2.3中括号[]里用><比较、中括号两端没空格

  2.4将整条代码块当一条命令执行时未添加``反向单引号

3、shell语法小结:

  ①、重视书写习惯,开发规范和开发制度,尽量减少脚本调试难度和次数,提升开发效率

  ②、shell基本语法要熟练,才能利用好脚本调试。

  ③、写脚本思路要清晰:

思考开发的框架,尽量模块化开发(第一部分、第二部、第三部...)分段实现。

思考实现框架:

  编程模块化

  打游戏通关的思想:函数1、函数2、Main()函数程序执行入口===>一般需要传参数时 Main $*

4、shell脚本调试技巧

  4.1、windows系统下开发的脚本放到linux上执行报错

  

  

 

  提示:只要脚本不是你写的或者windows下开发的脚本,你检查脚本明明没有问题,但就是执行出现错误,要想到执行dos2unix格式化一下脚本文件。

  最好,每次写脚本都执行dos2unix格式化下,再执行脚本。

  [root@localhost ~]# dos2unix while-debug-test.sh
  

  4.2使用echo命令调试

  echo命令是最有用的调试脚本工具之一。一般在可能出现问题的脚本重要逻辑处使用echo命令输出,然后exit 退出,查看输出结果是否正确,类似断点调试。

  

  4.3、使用bash命令参数调试

  [root@localhost ~]# sh [-nvx] test.sh
  参数:

    -n:不会执行该脚本,仅查询脚本语法是否有问题,并给出错误提示,该参数一般应用在脚本只能执行一次的情况下进行检查。

    -v:在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也会给出错误提示

    -x:执行脚本内容及输出显示到屏幕上,它会将脚本整个执行过程在屏幕输出,这个是对调试很有用的参数

  sh参数-n的测试,范例:

  [root@localhost ~]# sh -n if_debug-1.sh
  if_debug-1.sh:行9: 语法错误: 未预期的文件结尾

  4.4使用set命令调试部分脚本内容

  set命令可辅助脚本调试。以下是set 命令常用的调试选项:

  set -n 读命令但并不执行。

  set -v 显示读取的所有行。

  set -x显示所有命令及其参数

提示:

  1)同bash命令参数功能。

  2)开启调试功能通过set -x 命令,而关闭调试功能通过set +x

  优点:和bash -x相比,set -x可以缩小调试的作用域。

  

5、Shell脚本调试技巧小结:

  1)、首先用dos2unix对脚本文件格式化

  2)、直接执行脚本根据报错来调试,有时报错不准确。

  3)、sh -x 调试整个脚本,显示执行过程(大海捞针困难)。

  4)、set -x 和set +x调试部分脚本(脚本中设置)主要作用是缩小调试范围

  5)、echo输出变量及相关内容,然后紧跟着exit退出,不执行后面的程序,逐步跟踪脚本,对逻辑错误比较好用。

  6)、最关键的是语法熟练、编码习惯、编程思想,减轻调试负担,提供效率。

6、规范代码树

 

 超过200行的互相调用的脚本代码树:

 · bin目录存放执行脚本

 · conf目录存放定义的变量或配置文件的脚本

 · func存放函数脚本

 

posted on 2020-03-03 22:49  卡乐咪运维  阅读(230)  评论(0)    收藏  举报