• shell 调试


    检查语法

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

    sh -n script_name.sh
    
    

    启动调试

    sh -x script_name.sh
    
    
    #这里也可以在脚本中指定开启。如可以在script_name.sh中的这样一句:set -x

    进入调试模式后,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上的回车符 在UNIX上的显示形式。这种情况多半是在Windows上编辑了shell脚本,然后拿到UNIX/Linux上执行。只要将文件中所有的 删除即可。

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

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

    tr -d "15" < oldfile.sh > newfile.sh
  • 相关阅读:
    Luogu4233 射命丸文的笔记 DP、多项式求逆
    LOJ2267 SDOI2017 龙与地下城 FFT、概率密度函数、Simpson
    LOJ2882 JOISC2014 两个人的星座 计算几何
    UOJ343 清华集训2017 避难所 构造、打表
    Solution -「CTS2019」珍珠
    「珂朵莉树」学习笔记
    CSP2019-J/S 游记
    LeetCode(164)Maximum Gap
    LeetCode(165) Compare Version Numbers
    LeetCode(162) Find Peak Element
  • 原文地址:https://www.cnblogs.com/double12gzh/p/10166245.html
Copyright © 2020-2023  润新知