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 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
随机推荐
- 记录--你可能忽略的10种JavaScript快乐写法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 代码的简洁.美感.可读性等等也许不影响程序的执行,但是却对人(开发者)的影响非常之大,甚至可以说是影响开发者幸福感的重要因素之一: ...
- 记录--用JS轻松实现一个录音、录像、录屏的工具库
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 最近项目遇到一个要在网页上录音的需求,在一波搜索后,发现了 react-media-recorder 这个库.今天就跟大家一起研究一 ...
- 如何保证MySQL和Redis数据一致性?
背景 在高并发的业务场景中,因为MySQL数据库是操作磁盘效率比较低,因此大多数情况下数据库都是高并发系统的瓶颈.因为Redis操作数据是在内存中进行,所以就需要使用Redis做一个缓存.让请求先访问 ...
- Mac 使用 Nginx 在本地部署静态网站
安装 安装 Brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/i ...
- Linux shell中提取文件名和路径
本文地址: https://www.cnblogs.com/wanger-sjtu/p/17561896.html 首先假设我的文件全称:/home/luna/Desktop/Software/sof ...
- SQline安装
SQLite 安装 SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理.本章将讲解 Windows.Linux 和 Mac OS X 上的安装设置. 在 Windows 上安装 ...
- Windows系统自定义盘符图标
记录一个小知识: 自定义Windows系统盘符的图标,其实这个东西很简单,就像设置U盘的图标一样 首先准备一张ico图片,如果没有ico图片,只有jpg或其他格式的,可以使用这个在线转ico的网站,把 ...
- 重新整理 .net core 实践篇—————grpc工具[三十四]
前言 简单整理一下grpc工具. 正文 工具核心包: Grpc.Tools 这个是项目要引用的包,用来生成cs代码的. dotnet-grpc 这个就是cli,命令行工具 dotnet-grpc 核心 ...
- oracle 数据库连接
前言 关于oracle 数据库如何连接,我一开始以为和mysql 和 sql server一样,写好连接语句然后调用相应的dll. 知道我遇到了两个错误: 1.64位程序不能去驱动32位客户端 2.O ...
- 重新整理数据结构与算法(c#)—— 二叉树排序树补删除节点[二十二]
前言 续前一章. 正文 删除节点规则: 1.假如删除的是叶子节点,让他的父节点,断开和它的联系. 2.如果删除节点右左子树或者右子树的话,那么应该这样. 如果删除节点是它的父节点的左节点,而删除节点有 ...