• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Bash脚本内置的调试方法技巧
    POST TIME:2021-10-18 16:24

    用 Bash 写的脚本也可以进行调试,和 Python,Perl 等解释型语言一样。新建一个名为 servinfo 的脚本并增加可执行权限:

    复制代码 代码如下:

    $ vi servinfo

    #!/bin/bash

    echo "Hostname: $(hostname)"
    echo "Date: $(date)"
    echo "Kernel: $(uname -mrs)"

    $ chmod +x servinfo


    用 bash -x 来调试上述脚本,Bash 先打印出每行脚本,再打印出每行脚本的执行结果:
    复制代码 代码如下:

    $ bash -x servinfo
    ++ hostname
    + echo 'Hostname: vpsee'
    Hostname: vpsee
    ++ date
    + echo 'Date: Thu Sep  3 19:33:48 SAST 2009'
    Date: Thu Sep  3 19:33:48 SAST 2009
    ++ uname -mrs
    + echo 'Kernel: Linux 2.6.18-128.4.1.el5 i686'
    Kernel: Linux 2.6.18-128.4.1.el5 i686

    如果想同时打印行号的话,可以在脚本开头加上:
    复制代码 代码如下:

    export PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '

    执行结果为:
    复制代码 代码如下:

    $ bash -x servinfo
    + export 'PS4=+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '
    + PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: '
    ++4:5:: hostname
    +4:5:: echo 'Hostname: vpsee'
    Hostname: vpsee
    ++4:6:: date
    +4:6:: echo 'Date: Thu Sep  3 19:42:06 SAST 2009'
    Date: Thu Sep  3 19:42:06 SAST 2009
    ++4:7:: uname -mrs
    +4:7:: echo 'Kernel: Linux 2.6.18-128.4.1.el5 i686'
    Kernel: Linux 2.6.18-128.4.1.el5 i686

    如果只想调试其中几行脚本的话可以用 set -x 和 set +x 把要调试的部分包含进来:
    复制代码 代码如下:

    #!/bin/bash

    echo "Hostname: $(hostname)"
    set -x
    echo "Date: $(date)"
    set +x
    echo "Kernel: $(uname -mrs)"


    这个时候可以直接运行脚本,不需要执行 bash -x 了:
    复制代码 代码如下:

    $ ./servinfo
    Hostname: vpsee
    ++ date
    + echo 'Date: Thu Sep  3 19:46:53 SAST 2009'
    Date: Thu Sep  3 19:46:53 SAST 2009
    + set +x
    Kernel: Linux 2.6.18-128.4.1.el5 i686

    如果要调试一个非常复杂的 Bash 脚本的话,建议用专门的调试工具,比如:bashdb

    您可能感兴趣的文章:
    • 详解shell中source、sh、bash、./执行脚本的区别
    • linux bash脚本监控启动停止weblogic服务的脚本写法
    • Shell脚本bash: ./t.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
    • 使用Python脚本在Linux下实现部分Bash Shell的教程
    • 在Bash脚本中引入alias的方法
    上一篇:Shell脚本配合iptables屏蔽来自某个国家的IP访问
    下一篇:Shell、Perl、Python、PHP访问 MySQL 数据库代码实例
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信