欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2022-06-02 08:43:04
用 bash 写的脚本也可以进行调试,和 python,perl 等解释型语言一样。新建一个名为 servinfo 的脚本并增加可执行权限: 复制代码 代码如下: $...

用 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 脚本的话,建议用专门的调试工具,比如: