shell 调试方法
shell 在 linux 系统中比较常见,简单的脚本可以看着确实没难度,但是当脚本功能复杂后,看起来就不那么流畅了,所以掌握一些调试方式还是很有必要的,这里我收集了一次常用的调试方式。
shell调试的方法
echo 语句
通过在脚本代码中插入 echo 语句输出变量值、执行状态等信息,在脚本中直接打印还是比较方便的shell 脚本本身提供的一些方法
- -n 读一遍脚本中的命令但不执行,主要用于检查脚本中的语法错误。
- -v 一边执行脚本,一边将执行过程中的脚本命令打印到标准输出。
- -x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。
- +x 关闭跟踪执行信息。
trap 命令
使用 trap 命令可以捕获并处理脚本中的信号或错误。通过在脚本中设置 trap 命令,可以在发生特定事件时执行自定义操作,如输出日志、打印变量值等。调试工具
使用 trap 命令可以捕获并处理脚本中的信号或错误。通过在脚本中设置 trap 命令,可以在发生特定事件时执行自定义操作,如输出日志、打印变量值等。
实验一
使用 echo 输出变量信息,脚本命令如下
#!/bin/bash
fruits=("apple" "banana" "orange")
for fruit in "${fruits[@]}"
do
echo "I like $fruit"
done
输出如下所示:

实验二
在执行的时候使用增加 -x 参数,开启调试信息输出,命令如下
bash -x test.sh
输出如下所示:

实验三
在解释器参数中加上调试参数,这里的功能和命令中直接添加一样,所以输出的结果也实验二相同,添加的方式如下
#!/bin/bash -xv
#!/bin/sh -x
输出如下所示:

实验四
在脚本中使用 set -x 可以启用跟踪模式,将执行的每一行命令及其扩展结果显示出来,方便查看具体的执行流程。使用 set +x 可以关闭跟踪模式,所以可以使用此方法对其中一部分脚本进行调试,脚本如下
#!/bin/bash
set -x
fruits=("apple" "banana" "orange")
set +x
for fruit in "${fruits[@]}"
do
echo "I like $fruit"
done
输出如下所示:

实验五
trap 是shell自带的捕获信号量的指令。trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。
命令格式如下:
trap [-lp] [ARG] [SIGSPECS]
# -l 列出信号名称与对应的数值
# -p 列出信号与其绑定的命令列表
# ARG 与指定信号绑定的命令。如果 ARG 为空字符串,表示忽略信号;如果 ARG 不指定(缺省)或为-,表示执行信号的默认动作
# SIGSPECS 信号列表,可以是信号名称,也可以是信号对应的数值。可用信号可以使用trap-l查看
测试脚本
#!/bin/bash # 定义错误处理函数
handle_error() {
echo "An error occurred in the script!"
echo "Printing error message and exiting..."
echo "Error message: $1"
exit 1
} # 设置错误处理函数为脚本的错误处理器
trap 'handle_error "$BASH_COMMAND"' ERR echo "Start script" # 通过故意引发错误来测试错误处理
unknown_command echo "This line will not be executed" echo "End script"
测试结果

实验六
也可以使用相关的 shell 脚本使用工具,调试起来应该会更方便,但是我也没使用过,前面的饿调试方式基本够用了,以后有使用到合适的调试工具,我在补上
shell 调试方法的更多相关文章
- (转)shell调试方法
---恢复内容开始--- 转载:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 曹 羽中2007 年 ...
- Linux - Shell脚本调试方法
Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...
- VxWorks操作系统shell命令与调试方法总结
VxWorks下的调试手段 主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤.思路. 1 Tornado的调试工具 嵌入式实时操作系统VxWorks和集成开发 ...
- Shell - Shell脚本调试方法
Shell脚本调试选项 Shell本身提供一些调试方法选项: -n,读一遍脚本中的命令但不执行,用于检查脚本中的语法错误. -v,一边执行脚本,一边将执行过的脚本命令打印到标准输出. -x,提供跟踪执 ...
- Shell脚本的调试方法
Shell脚本的调试方法 Shell提供了一些用于调试脚本的选项,如下所示: -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v 一边执行脚本,一边将执行过的脚本命令打印到标 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- shell 脚本常用调试方法
曾经我刚开始学习 shell 脚本时,除了知道用 echo 输出一些信息外,并不知道其他方法,仅仅依赖 echo 来查找错误,比较难调试且过程繁琐.效率低下.本文介绍下我常用的一些 shell 脚本调 ...
- shell脚本调试方法
我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用 Shell 调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工 ...
- GDB中应该知道的几个调试方法 来自陈皓
GDB中应该知道的几个调试方法 2011年2月10日陈皓发表评论阅读评论62,325 人阅读 七.八年前写过一篇<用GDB调试程序>,于是,从那以后,很多朋友在MSN上以及给我发邮件询 ...
- Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
随机推荐
- ElasticSearch分页查询的实现
1.设置mapping PUT /t_order { "settings": { "number_of_shards": 1, "number_of_ ...
- C#(winform)自定义ListItem类方便ComboBox操作
public class ListItem { /// <summary> /// Key /// </summary> public string Key { get; se ...
- OpenHarmony携千行百业创新成果亮相HDC.Together 2023
8月4日-6日,华为开发者大会2023(以下简称"大会")在中国松山湖举办,OpenAtom OpenHarmony(简称"OpenHarmony")隆重参会 ...
- 我把分布式音乐播放器适配了Stage模型
OpenAtom OpenHarmony(以下简称"OpenHarmony")应用开发自API 8及其更早版本一直使用的是FA模型进行开发.FA模型是Feature Abilit ...
- Pandas统计计算
基本的统计方法 Method Description count Number of non-NA values describe Compute set of summary statistics ...
- Matplotlib绘图设置---颜色条设置
设置颜色条 对于图形中由彩色的点.线.面构成的连续标签,用颜色条来表示的效果比较好,在Matplotlib中,颜色条是一个独立的坐标轴. 可视图形的颜色选择可参考matplotlib配色方案. Cho ...
- 三七互娱《斗罗大陆:魂师对决》上线,Network Kit助力玩家即刻畅玩
三七游戏旗下的年度旗舰大作<斗罗大陆:魂师对决>现已开启全平台公测.8月1日,三七互娱技术副总监出席了HMS Core.Sparkle游戏应用创新沙龙,展示了在HMS Core Netwo ...
- vue element序号翻页连续排序
type="index" :index="indexMethod" // 序号翻页连续排序 indexMethod(index) { return (this. ...
- KL散度和交叉熵的对比介绍
KL散度(Kullback-Leibler Divergence)和交叉熵(Cross Entropy)是在机器学习中广泛使用的概念.这两者都用于比较两个概率分布之间的相似性,但在一些方面,它们也有所 ...
- maven 设置阿里镜像[二]
前言 因为我们在国内,网速很慢,所以最好设置一下阿里镜像. 1.在maven中的conf下的setting 修改为: <mirror> <id>alimaven</id& ...