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

用 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

时间: 2024-09-20 00:46:00

Bash脚本内置的调试方法技巧_linux shell的相关文章

shell脚本中取消重定向的方法实例_linux shell

在上一篇关于shell编程的例子中,有讲到把shell脚本进行扩展之后重定向到一个文件中,以便进行查看和调试http://www.jb51.net/article/62435.htm.但是,若是有另一种情况:只是在某些地方进行重定向,而其他地方不进行重定向.那么我们就来修改一下上一篇中的例子来进行这种需求的满足: 复制代码 代码如下: #!/bin/bash function setlogfile {     if ! [ -z "$1" ]; then         echo &q

Shell脚本去重的几种方法实例_linux shell

测试文件 复制代码 代码如下: [root@bogon ~]# cat >test jason jason jason fffff jason 按 Ctr + D保存 1.sort -u 复制代码 代码如下: [root@bogon ~]# sort -u test fffff jason 2.uniq 复制代码 代码如下: [root@bogon ~]# uniq test jason fffff jason 由此可见,uniq需要先排序后才能去重 3.sort.管道和uniq结合运用 去除重

Lua内置的调试器用法详解

  这篇文章主要介绍了Lua内置的调试器用法,在编程debug操作中非常有用,要的朋友可以参考下 Lua提供了一个调试库,它提供了所有的基本功能,创造自己的调试器.即便如此,也没有内置的Lua调试器,Lua为开发者创建很多调试器是开源. 调试Lua库中可用的功能列于下表连同它的用途. 上面列表中的Lua调试功能的完整列表,我们经常使用,使用上述功能,并提供了更方便的调试库.使用这些函数和创建自己的调试器是相当复杂,不是最好的选择的.无论如何,我们将看到使用简单的调试功能的例子. 代码如下: fu

Win10如何开启内置WiFi热点,Win10开启内置WiFi热点方法

Win10开启内置WiFi热点方法 1.在电脑的右下角打开网络设置,如下所示要你已经有连接的网络了: 2.然后在进入之后我们点击 "移动热点"功能: 3.打开移动热点后我们设置WiFi名称和WiFi密码,然后开启WiFi. 其实在win10开启wifi热点功能就这么简单了,操作与以前和系统操作差不多的呀.

在smarty中调用php内置函数的方法_php技巧

相信有很多朋友还不知道,可以在smarty模板里调用php的内置函数,我们一起来看看它的用法. 模板书写: {'param1'|functionName:'param2':'param3'} php函数原型: echo functionName('param1','param2','param3'); 实例: {'1234567'|substr:'1':'2'} 下面这个和函数的参数顺序有关系 {'a'|str_replace:'A':'abcd'} 直接延伸到,直接在php中写一个函数调用,不

Lua内置的调试器用法详解_Lua

 Lua提供了一个调试库,它提供了所有的基本功能,创造自己的调试器.即便如此,也没有内置的Lua调试器,Lua为开发者创建很多调试器是开源. 调试Lua库中可用的功能列于下表连同它的用途.  上面列表中的Lua调试功能的完整列表,我们经常使用,使用上述功能,并提供了更方便的调试库.使用这些函数和创建自己的调试器是相当复杂,不是最好的选择的.无论如何,我们将看到使用简单的调试功能的例子. 复制代码 代码如下: function myfunction () print(debug.traceback

Win8.1使用内置照片应用的方法

  使用技巧: 进入开始屏幕(或者按Win键切换),点击照片应用,进入图片库. 注:(图片库默认路径存放在系统盘:Users用户名图片库) 例如:打开,浏览图片库下的Windows图片集 任选一张,全屏欣赏,右击空白区域,可以呼出照片应用中各种扩展命令,包括:删除.打开方式.设置为.幻灯片放映.旋转.裁剪.编辑等功能.其中编辑功能是其亮点,超越了之前自带的传统桌面应用中图片浏览器. 照片应用特色功能一:设置图片为锁屏界面.照片动态磁贴. 照片应用特色功能二:随意裁剪图像大小. 照片应用特色功能三

win2008内置防火墙配置方法说明_windows2008

而随着Windows Server 2008的日渐向我们走近,其内置的防火墙功能得到了巨大的改进.下面让我们一起来看一下这个新的高级防火墙将如何帮助我们防护系统,以及如何使用管理控制台单元来配置它. 为什么你应该使用这个Windows的基于主机的防火墙? 今天许多公司正在使用外置安全硬件的方式来加固它们的网络. 这意味着,它们使用防火墙和入侵保护系统在它们的网络周围建立起了一道铜墙铁壁,保护它们自然免受互联网上恶意攻击者的入侵.但是,如果一个攻击者能够攻 破外围的防线,从而获得对内部网络的访问,

关闭摄像头内置麦克风的方法

笔者前不久购买了一款号称有200万像素的摄像头,没想到第一次使用就出现了问题.将摄像头连接到电脑上,安装驱动后用自带的软件测试,画面效果还不错.找网友视频聊天,对方说可以听到我这边的打字声,但杂音非常大. 我们知道,如果视频时要同步语音,必须将麦克风接到声卡上,还要打开声卡的MIC(麦克风)通道,而笔者根本没接麦克风.这是怎么回事?仔细观察摄像头,发现其底部有一排网状小孔,原来它具有语音功能.聊天时,摄像头内置的麦克风就会开启. 用鼠标双击系统任务栏的小喇叭,发现"音量控制"的&quo