zoukankan      html  css  js  c++  java
  • Shell之调试

    一、调试方法概述

    在Shell脚本开发过程中,难免会犯各种各样的错误,这时需要的就是能对错误快速定位以及修复,Shell脚本中有以下的调试方法可供参考:

    • 防止是windows下或者其他人的脚本,先使用dos2unix进行脚本格式化
    • 根据执行的脚本报错信息直接定位
    • sh -x进行整个脚本内容调试
    • set -x和set +x对脚本中局部内容进行调试
    • 使用echo(紧跟exit)命令进行打印调试

    二、调试实践

     1、dos2unix脚本格式化

    如果脚本是在windows下开发,最好是使用dos2unix进行格式化一下:

    [root@localhost ~]# yum install -y  dos2unix
    Loaded plugins: fastestmirror
    base                                                  | 3.6 kB     00:00     
    ...
    [root@localhost cal_length]# dos2unix cal_str.sh
    dos2unix: converting file cal_str.sh to Unix format ...

    2、根据执行的脚本报错信息直接定位

    # 脚本中if判断后少一个空格
    [root@localhost cal_length]# cat array_1.sh 
    #!/bin/sh
    arr=(I am looking for you)
    for word in ${arr[*]}
    do
      if [${#word} -le 3 ]
      then
         echo $word
      fi
    done
    
    # 执行脚本直接报错,根据报错信息纠正
    [root@localhost cal_length]# sh array_1.sh 
    array_1.sh: line 5: [1: command not found
    array_1.sh: line 5: [2: command not found
    array_1.sh: line 5: [7: command not found
    array_1.sh: line 5: [3: command not found
    array_1.sh: line 5: [3: command not found

    3、sh -x进行整个脚本内容调试

    # 执行过程很清晰
    [root@localhost cal_length]# sh -x array_1.sh 
    + arr=(I am looking for you)
    + for word in '${arr[*]}'
    + '[' 1 -le 3 ']'
    + echo I
    I
    + for word in '${arr[*]}'
    + '[' 2 -le 3 ']'
    + echo am
    am
    + for word in '${arr[*]}'
    + '[' 7 -le 3 ']'
    + for word in '${arr[*]}'
    + '[' 3 -le 3 ']'
    + echo for
    for
    + for word in '${arr[*]}'
    + '[' 3 -le 3 ']'
    + echo you
    you

    4、set -x和set +x对脚本中局部内容进行调试

    #!/bin/sh
    #脚本中添加set -x和set +x,这样只会调试之间的脚本
    set -x
    arr=(I am looking for you)
    set +x
    for word in ${arr[*]}
    do
      if [ ${#word} -le 3 ]
      then
         echo $word
      fi
    done
    
    # 脚本过程输出
    [root@localhost cal_length]# sh -x array_1.sh 
    + set -x
    + arr=(I am looking for you)
    + set +x
    I
    am
    for
    you

    5、使用echo(紧跟exit)命令进行打印调试

    #!/bin/sh
    arr=(I am looking for you)
    echo ${arr[*]} # 加上echo进行调试,如果正常输出,脚本之前都没问题
    exit # 直接退出脚本
    for word in ${arr[*]}
    do
      if [ ${#word} -le 3 ]
      then
         echo $word
      fi
    done
    
    # 执行脚本
    [root@localhost cal_length]# sh array_1.sh 
    I am looking for you
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    骑行的乐趣
    亲子运动会
    【转载】程序员接私活经验总结,来自csdn论坛语录
    【原创】Asp.Net MVC 学习笔记之使用Model验证
    【转载】经典js技巧
    【原创】关于Sqlserver的LogFiles超大的问题
    【总结】Winform编程常用小技巧
    【总结】WebBrowser相关资料索引
    【原创】Asp.Net MVC学习笔记之使用AcceptVerbs标签来制定Action的响应行为
    【转载】一个资深SOHO程序员对新人的建议网上接活(转自CSDN)
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14395511.html
Copyright © 2011-2022 走看看