bash调试方法总结

  在看nginx源码实现时发现有些代码是根据不同的本地环境动态生成的,看了一下大致生成流程,基本上都是通过shell脚本调用shell脚本实现的。看到了shell脚本,就想到如何调试shell脚本,shell脚本在实际工作中运用的挺多的,所以就将shell脚本的调试方法进行总结,shell程序有很多中,本篇文章将总结bash脚本的调试。

1. bash debugger

1.1 bash debugger安装

首先查看本地bash版本,然后从如下地址下载对应ash debugger源码

bash debugger - Browse /bashdb at SourceForge.net

比如本人机器bash版本如下,就下载4.4的源码

1.2 编译安装

tar -zxvf bashdb-4.4-0.94.tar.gz 

cd bashdb-4.4-0.94/
./configure

make && make check

$make install

1.3 调试

省略

2. bash -x

以 bash -x  脚本名的方式运行脚本就能看到调试信息

调试举例:

有如下三个shell脚本,tesh.sh, init,define,目录结构如下

 test.sh脚本调用init脚本和define脚本,init脚本用来初始化全局变量,define脚本用来定义.h文件生成模板

int内容如下:
 

MAKE_FILE=Makefile
AUTO_ENV_H=auto_env.h
FUN_OBJS=subdir

define内容如下:


# Copyright (C) Test Shell
# Copyright (C) Test, Inc.


cat << END > $AUTO_ENV_H

#ifndef $have
#define $have  $value
#endif

END

test.sh内容如下:

#!/bin/bash

#测试调试
uname -s  
uname -r 
uname -m 
read num1
read num2
let num=$num1+$num2                     

#初始化变量
. ./init

#变量赋值,执行替换
have=NGX_ALIGNMENT value=16 . define

#echo $num
cat << END                        >  ${MAKE_FILE}
 
install_perl_modules:
	cd $NGX_OBJS/src/http/modules/perl && \$(MAKE) install
END


bash -x test.sh运行结果显示如下:

脚本生成了两个文件Makefile和auto_env.h

内容分别如下:

 
install_perl_modules:
	cd /src/http/modules/perl && $(MAKE) install

#ifndef NGX_ALIGNMENT
#define NGX_ALIGNMENT  16
#endif

 通过运行结果看,test.sh脚本输出调试信息前有一个+,而被调用的脚本调试信息++,这样就能区分层级和调用关系

3. set -x

set -x调试与bash -x调试方式类似,只不过该方式更加灵活,配合set +x只在脚本局部进行调试输出

调试举例:

test.sh脚本内容如下:

#!/bin/bash

#测试调试
set -x
uname -s  
uname -r 
uname -m 
read num1
read num2
let num=$num1+$num2     
set +x                

#初始化变量
. ./init

#变量赋值,执行替换
have=NGX_ALIGNMENT value=16 . define

#echo $num
cat << END                        >  ${MAKE_FILE}
 
install_perl_modules:
	cd $NGX_OBJS/src/http/modules/perl && \$(MAKE) install
END


执行脚本:bash test.sh 

运行结果如下:

由于我将set -x 和set +x放在了主控脚本开头的位置,所以调试只输出了主控脚本的调试信息,被调脚本的调试信息没有输出。这样我们就能很灵活根据实际出问题的地方添加调试,避免过多调试信息的干扰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值