Bash脚本内置的调试方法技巧

 更新时间:2015年04月25日 11:35:54   投稿:junjie  
这篇文章主要介绍了Bash脚本内置的调试方法技巧,本文介绍了调试技巧和几个调试技巧,比如输出行号的方法、只调试某段程序的方法,需要的朋友可以参考下

用 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升级全交互式shell

    反弹shell升级全交互式shell

    本文主要介绍了反弹shell升级全交互式shell,以提高远程控制能力,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • linux下的tar命令详细解释

    linux下的tar命令详细解释

    在Linux中,压缩与解压用得最多的tar.tar命令确实很厉害。下面通过本文给大家分享linux下的tar命令详细解释,感兴趣的朋友一起看看吧
    2017-08-08
  • Linux Shell脚本系列教程(二):终端打印命令详解

    Linux Shell脚本系列教程(二):终端打印命令详解

    这篇文章主要介绍了Linux Shell脚本系列教程(二):终端打印命令详解,本文着重讲解了echo终端打印、printf终端打印两个打印出输出命令,需要的朋友可以参考下
    2015-06-06
  • linux删除无效链接文件脚本分享

    linux删除无效链接文件脚本分享

    一个 shell 脚本文件,用于删除指定目录下无效链接文件,可利用标准输入指派多个处理目标
    2014-03-03
  • 定时导出mysql本地数据替换远程数据库数据脚本分享

    定时导出mysql本地数据替换远程数据库数据脚本分享

    这篇文章主要介绍了mysql每天定时倒出本地数据,替换远程数据库数据的脚本,需要的朋友可以参考下
    2014-03-03
  • linux shell数组深入学习理解

    linux shell数组深入学习理解

    本文为大家介绍linux shell数组的相关知识,并提供了充足的例子供参考,这么好的东东,千万不要错过
    2013-02-02
  • 利用shell命令删除指定的文件的方法

    利用shell命令删除指定的文件的方法

    本文主要介绍了利用shell命令删除指定的文件的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Bash EOF的使用小结

    Bash EOF的使用小结

    本文主要介绍了Bash EOF的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 在Linux中复制文件夹的命令详解

    在Linux中复制文件夹的命令详解

    这篇文章给大家介绍了Linux的基础操作,如何在 Linux 中复制文件夹,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • shell脚本之sed详细用法详解

    shell脚本之sed详细用法详解

    Sed是一个非交互性文本流编辑器,它编辑文件或标准输入导出的文本拷贝,vi中的正则表达式命令在sed中大多可以通用,下面这篇文章主要给大家介绍了关于shell脚本之sed详细用法的相关资料,需要的朋友可以参考下
    2022-07-07

最新评论