Shell脚本调试技巧

2023-11-09

脚本调试的主要工作就是发现引发脚本错误的原因以及脚本源代码中定位错误行,归纳汇总了SHELL脚本的总总方法,供大家学习参考。


方式一: 通过echo方式

功能: 最简单的调试方法,可以在任何怀疑出错的地方用echo打印变量

场合所有怀疑可能有问题的地方,省略了所有

示例:echo $VAR



方式二: 通过选项方式[-ncxv]

-n    

【功能】: 读取shell脚本,但不实际执行

场合用于测试Shell脚本中是否存在语法错误

示例 : bash -n script.sh

-c    

【功能】: 该选项使Shell解析器从字符串而非文件中读取并执行命令

场合当需要调试一小段脚本的执行结果时,非常方便

示例 : bash -c 'x=1;y=2;let z=x+y;echo "z=$z"'

-v    

【功能】: 区别于-x参数,该选项打印命令行的原始内容,-x参数打印出经过替换后命令行的内容

场合仅想显示脚本的内容时

示例 : bash -v script.sh

-x    

【功能】: 提供跟踪执行信息,将执行脚本的过程中把实际执行的每个命令显示出来,行首显示+,+后面显示经过替换之后的命令行内容,有助于分析实际执行的是什么命令.

场合是调试Shell脚本的强有力工具,是Shell脚本首选的调试手段

示例:

  • 在命令行提供参数:sh -x script.sh
  • 脚本开头提供参数:#!/bin/sh -x
  • 在脚本中用set命令启用or禁用参数:其中set -x表启用,set +x表禁用

方式三: 通过test的方式

备注: 利用test方法可以检查逻辑操作符,文件状态,字符串,数值测试!返回值0为真,其他任何值为假


方式四: 通过trap来调试

【作用】:   用于捕获指定的信号并执行预定义的命令
【语法】:    trap 'command' signal
【说明】:    signal是要捕获的信号,command是捕获到指定的信号,所要执行的命令, 可以用kill -l命令看到系统中全部       可用的信号名,捕获信号后所执行的命令, 可以是一条或多条合法的Shell语句,也可以是一个函数名,Shell脚本执行时,会产生三个伪信号(非操作系统产生,而仅是shell本身产生,称之为伪信息),通过使用trap捕获这三个伪信号并输出信息对调试大有帮助
SHELL三个伪信号
EXIT               从一个函数中退出或整个执行完毕
ERR                 当一个命令执行不成功,返回非0状态时
DEBUG              脚本中每一条命令执行之前
【示例】:    

调整后输出结果:


方式五: 使用调试工具-bashdb

【功能】: 类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能

场合脚本比较大时,通过-x参数调试时已不方便时.

用法:

  • bashdb -c script.sh
  • bashdb script.sh
  • bashdb --debugger script.sh

说明:该工具默认未安装,当前最新版本为:4.3-0.91,下载目录:http://bashdb.sourceforge.net/

1). 如果是ubuntu系统,直接用apt-get来安装

  • apt-get install bashdb

2). 如果是Readhat等版本,使用wget下载后,编译,安装,大致步骤如下:

  • wget https://sourceforge.net/projects/bashdb/files/bashdb/4.3-0.91/bashdb-4.3-0.91.tar.bz2
  • tar -xzvf bashdb-4.3-0.91.tar.bz2
  • cd bashdb-4.3-0.91
  • ./configure
  • make && make install

示例:


常用命令

  • l             列出当前行以下的10行
  • q|quit        退出
  • h             帮助
  • /for/         向后搜索字符串for
  • ?for?         向前搜索字符串for
  • x 1+2         计算算术表达式的值
  • !! ls -laRt   执行shell命令
  • n             执行下一条语句
  • s 4           单步执行4次,如遇到函数则进入函数里面
  • b 4           在行号4处设置断点
  • del 4         删除行号为4的断点
  • c 10          一直执行到行号10处   
  • R|run       重新执行当前调试脚本
  • finish        执行到程序最后

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本调试技巧 的相关文章

  • 零基础入门 HTML 的 8 分钟极简教程

    在今天 前端工程师已经成为研发体系中的重要岗位之一 可是与此相对的是 极少大学的计算机专业愿意开设前端课 大部分前端工程师的知识 也都是在实践和工作中不断学习的 最近收到很多同学的后台留言 说希望多推出一些前端方向的教程 今天我们就带来一个
  • InfoQ视频直播分享报名:前贝尔实验室、Oracle架构师为你在线揭秘分布式平台内核...

    报名方式 关注InfoQ微信公众号 ID infoqchina 回复 InfoQ 即可观看在线直播技术分享 分享地点 u0026amp 时间 InfoQ直播微课堂将在熊猫 TV 网站播出 看腻了卖肉的女主播 来看看QCon 的明星讲师如何
  • Linux,Network manager 导致节点异常重启

    推断是Network manager 导致的 原因待查今天在VmWare的虚拟机上装了个测试RAC 又遇到了一个摸不到头绪的问题CRS装好后 一旦登陆图形界面 节点就重启 事情就有这么巧不登陆图形界面 观察了1个小时没问题 一旦登陆后 立刻
  • 汇编语言(王爽第三版)实验十五

    实验十五 题目与个人思路 安装一个新的int 9中断例程 功能 在DOS下 按下 A 键后 除非不再松开 如果松开 就显示满屏幕的 A 其他的键照常处理 我刚刚开始以为还要判断按下 A 键的扫描码 后来发现不用 只要判断松开 A 键的扫描码
  • 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”

    一 最简单的 操作系统 最最简单的 操作系统 就是一个最最简单的引导扇区 Boot Sector 虽然它不具有任何功能 但是它却能够直接在裸机上运行 不依赖其他软件 一个引导扇区是512个字节 并且以0xAA55为结束标识的扇区 下面就是那
  • Python编程中的for循环语句学习教程

    本文来源于公众号 csdn2299 喜欢可以关注公众号 程序员学府 这篇文章主要介绍了Python编程中的for循环语句学习教程 是Python入门学习中的基础知识 需要的朋友可以参考下 Python for循环可以遍历任何序列的项目 如一
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • DDD专家张逸:构建领域驱动设计知识体系

    张逸 读完需要 5分钟 速读仅需 2 分钟 领域驱动设计专家 曾就职于 ThoughtWorks 作为 Lead Consultant 为客户提供架构设计 大数据分析 持续交付 代码质量 敏捷管理等咨询服务 著译作包括 软件设计精要与模式
  • 看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

    2020年已经过去 无论我们过得顺遂平安 还是过得无比艰难 我们应该都会记住这一年 回顾2020年 在这个不同寻常的疫情之年 科技成为人类抗击疫情的关键 而人工智能技术投入抗疫战争之中 可以说是人类有史以来的第一次 而与此同时 AI技术已经
  • 【PAT】B1032 挖掘机技术哪家强 (20 分)_C语言实现

    1 挖掘机技术哪家强 20 分 为了用事实说明挖掘机技术到底哪家强 P A T PAT PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1
  • SitePoint播客#61:HTML5 =厨房水槽

    Episode 61 of The SitePoint Podcast is now available This week your hosts are Patrick O Keefe iFroggy Stephan Segraves s
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • 磁盘调度算法笔记和练习题

    磁盘调度算法 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 练习题 先来先服务FCFS 最短寻道时间优先SSTF 扫描调度SCAN 它是一次只响应一个方向上的请求 这个方向上的请求都响应完了 再掉头处理另一个方向上的 有点
  • CentOS Linux服务器安全设置

    转自 http www osyunwei com archives 754 html 引言 我们必须明白 最小的权限 最少的服务 最大的安全 所以 无论是配置任何服务器 我们都必须把不用的服务关闭 把系统权限设置到最小话 这样才能保证服务器
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • jvm之栈、堆

    1 Java Virtual Machine 人群当中 一位叫java的小伙子正向周围一众人群细数着自己取得的荣耀与辉煌 就在此时 c老头和c 老头缓步走来 看着被众人围住的java c老头感叹地对着身旁的c 说道 原以为你就可以挑起我的梁
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国
  • I/O设备模型

    I O设备模型 绝大部分的嵌入式系统都包括一些I O Input Outut 输入 输出 设备 例如仪器上的数据显示屏 工业设备上的串口通信 数据采集设备上用于保存数据的Flash或SD卡 以及网络设备的以太网接口等 I O设备模型框架 R
  • 八股文打卡day20——操作系统(3)

    面试题 线程同步的方式有哪些 我的回答 多线程同时访问和修改某个数据的话 会造成数据的不一致和冲突问题 所以就需要线程同步 线程同步的方式有 1 互斥锁 互斥锁就是 当一个资源被访问和操作时 会对这个资源加锁 把这个资源锁定 其他线程不能对

随机推荐

  • 31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

    说在前面 开发环境 Vivado 语言 Verilog cpu框架 Mips 控制器 组合逻辑 指令译码器 我们需要根据一条32位的指令的结构确定是哪一条指令 可以根据操作码 op 以及功能码 func 使用case语句确定 下述代码中ca
  • 传统方法:textcnn文本分类中超参数对分类器的影响

    引言 众所周知 文本分类是自然语言处理中最常见的任务之一 而TEXTCNN是每一个NLPer入门学习 deeplearning在自然语言处理中应用的首选 相对现在火热得BERT而言 TEXTCNN得结构相对来说更加简单 但其容易被理解 模型
  • 解析TCP之滑动窗口(动画演示)

    概述 滑动窗口实现了TCP流控制 首先明确滑动窗口的范畴 TCP是双工的协议 会话的双方都可以同时接收和发送数据 TCP会话的双方都各自维护一个发送窗口和一个接收窗口 各自的接收窗口大小取决于应用 系统 硬件的限制 TCP传输速率不能大于应
  • 【概率论与数理统计】猴博士 笔记 p29-32 均匀分布、泊松分布、指数分布、几何分布

    均匀分布U 题型 已知某随机变量满足某分布 求对应的概率 期望 方差 也是套公式 例1 设随机变量X U 2 5 求P X gt 4 EX DX 套公式得 p x 4
  • 解决Tomcat启动控制台输出中文信息乱码 [亲测好用]

    解决Tomcat启动控制台输出中文信息乱码 亲测好用 文章目录 解决Tomcat启动控制台输出中文信息乱码 亲测好用 一 问题描述 Tomcat启动控制台输出信息乱码解决 二 问题分析 Tomcat日志之所以出现中文乱码问题是因为日志输出的
  • 2012年蓝桥杯省赛-汉诺塔

    题目 题目链接 题解 题目本身很简单 但是我想提醒几点 会推导出结论 2 n 1 2 n 1 2n 1 特殊的输出方式 对于汉诺塔问题 存在递推公式
  • (Jquery功能篇) JPage分页控件实例代码

    截图 使用JPage实现分页效果图 第一步 加载JPage插件 相关资源文件和Js代码 截图所示 第二步 编写相关js 代码 function bindDate 删除相关数据 删除Id为edc的tbody的相关数据 移除Class为cont
  • 2020-10-17第十一届第二场蓝桥杯JavaB组

    第十一届第二场蓝桥杯JavaB组 题解 试题 B 寻找 2020 本题总分 5 分 问题描述 小蓝有一个数字矩阵 里面只包含数字 0 和 2 小蓝很喜欢 2020 他想找 到这个数字矩阵中有多少个 2020 小蓝只关注三种构成 2020 的
  • 合规性强的第三方收款工具受青睐 报告:连连国际使用频率排名第一

    经过多年发展 我国跨境电商已经完成第一轮草根式高增长 进入规模化出海阶段 这也进一步促使银行 跨境支付机构 跨境电商平台等不断优化升级产品方案 深化出海全链路服务生态 全力帮助外贸企业 中国品牌开辟出海新路径 实现新发展 在对跨境企业现状及
  • 《Stable Diffusion web UI-Segment Anything未完待续01》

    最近每天晚上都在弄手指修复 但是都不理想 索性放在后面再写教程 今天中午花时间弄了一下Segment Anything 1 下载Segment Anything 点击拓展 从网址安装 安装 已安装 点击重启 2 点击这个项目红色框里面的 h
  • 【机器学习实战】8、预测数值型数据:回归

    文章目录 8 1 用线性回归找到最佳拟合直线 8 1 1 线性回归 8 1 2数据可视化 8 1 3 求回归系数向量 并根据系数绘制回归曲线 8 2 局部加权线性回归 LWLR 8 3 预测鲍鱼年龄 8 4 岭回归 8 5 前向逐步回归 8
  • linux 模拟postman进行post提交

    curl H Content Type application json charset utf 8 H Data Type msg X POST data mobile 13366088888 name 哈哈 http 192 168 1
  • 使用Jtest 2022.2简化严格的Java测试

    阅读本文 您可以了解您的开发团队如何利用Parasoft Jtest 2022 2 中包含的先进功能和增强功能来简化 Java 测试 如果开发人员没有自动化测试流程 Java和JUnit测试对他们来说可能是耗时且具有挑战性的 随着Paras
  • 使用Python将TXT转为Excel

    第一步 我们创建一个txt文件 内容为图中所示 第二步 开始写代码 导入openpyxl用于excel操作 from openpyxl import Workbook 新建保存结果的excel sheet wb Workbook r res
  • 二、大数据实践项目——数据分析与处理

    一 数据处理主要任务 二 数据集处理 1 查看数据集基本情况 调用 info 函数来查看数据data的基本情况 包括数据维度 字段名称和类型以及有无缺失值 数据占用内存等 以下为部分字段信息 可见总的数据47447行 少于此数值的为有数据缺
  • 矩阵的1/2次方

    矩阵的1 2次方 求矩阵的1 2次方的前提是A为正定阵 这时A一定相似于主对角元素都为正数的对角阵 也就是说存在可逆阵P 使得 P 1 AP dia 1 2 n 是对角阵 取B Pdiag 1 2 n P 1 则B 2 A 即B A 1 2
  • 分析如何用万能表测试MOS管好坏的小窍门

    现在家电 照明 汽车电子等领域行业开关管均采用性能优异的MOS管取代过去的大功率晶体三极管 使整体的效率 可靠性 故障率均大幅的下降 虽说是大幅降低 但也会出现损坏的情况 由于MOS管和大功率晶体三极管在结构 特性有着本质上的区别 在应用上
  • Java堆内存是线程共享的吗

    转载声明 Java堆内存是线程共享的 面试官 你确定吗 Java作为一种面向对象的 跨平台语言 其对象 内存等一直是比较难的知识点 所以 即使是一个Java的初学者 也一定或多或少的对JVM有一些了解 可以说 关于JVM的相关知识 基本是每
  • 堆叠注入原理解析

    文章目录 一 堆叠注入原理 二 堆叠注入触发条件 三 题目 一 堆叠注入原理 mysql数据库sql语句的默认结束符是以 结尾 在执行多条SQL语句时就要使用结束符隔开 那么在 结束一条sql语句后继续构造下一条语句 是否会一起执行 因此这
  • Shell脚本调试技巧

    脚本调试的主要工作就是发现引发脚本错误的原因以及脚本源代码中定位错误行 归纳汇总了SHELL脚本的总总方法 供大家学习参考 方式一 通过echo方式 功能 最简单的调试方法 可以在任何怀疑出错的地方用echo打印变量 场合 所有怀疑可能有问