bash调试方法总结
创始人
2024-04-16 07:49:27
0

  在看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/
./configuremake && 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
#endifEND

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放在了主控脚本开头的位置,所以调试只输出了主控脚本的调试信息,被调脚本的调试信息没有输出。这样我们就能很灵活根据实际出问题的地方添加调试,避免过多调试信息的干扰。

相关内容

热门资讯

起诉闺蜜借款被驳回?平远法院审... 近日,平远法院审理了一起民间借贷纠纷。原告小洁起诉闺蜜小青,要求归还6000元借款,并提交了微信转账...
广西“上里西游记”表演团队走红... 在“上里西游记”的直播间,身穿红袈裟、骑着白马的“唐僧”跟着“孙悟空”和“猪八戒”走在前面,“沙和尚...
政策组合拳助力“十五五”良好开... 岁末年初,政策窗口期至关重要。 中央经济工作会议部署落定,国家发展改革委已率先行动,抢抓时间窗口,主...
思创医惠:收到杭州市公安局《移... 每经AI快讯,12月31日,思创医惠(300078.SZ)公告称,公司收到杭州市公安局出具的《移送审...
明星电力:员工生育严格执行国家... 有投资者在互动平台向明星电力提问:“您好,请问公司是否针对员工生育或育儿设有相关的福利或激励政策? ...
高科技产业商业秘密保护的挑战与... 一、高科技产业商业秘密纠纷频发 智能驾驶、芯片、动力电池等高科技产业,商业秘密纠纷频发。2025年7...
百利科技(603959)披露公... 截至2025年12月31日收盘,百利科技(603959)报收于5.74元,较前一交易日下跌1.88%...
2025年山西破获经济犯罪案件... 中新网太原12月31日电 (记者 李庭耀)记者31日从山西省公安厅获悉,2025年,山西警方累计破获...
澄星股份:为员工提供符合国家法... 有投资者在互动平台向澄星股份提问:“您好,请问公司是否针对员工生育或育儿设有相关的福利或激励政策? ...
成都市新都区举行劳动纠纷处置比... 近日,2025年“新工司南”主题交流活动暨成都市新都区劳动纠纷处置比武竞赛在四川科伦药业股份有限公司...