一、如何debug

  1.通过sh命令的参数:

sh [-nvx] scripts.sh
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!

  示例1:no news is good news

[root@localhost tmp]# sh -n add1_100.sh
[root@localhost tmp]#

  示例2:

[root@localhost tmp]# sh -n add1_100.sh
add1_100.sh:行12: 语法错误: 未预期的文件结尾
 #!/bin/bash
#简介略
##########
declare i=
declare sum=
while [ ${i} -le ]
do
sum1=$((${sum}+${i}))
i=$((${i}+))
done1
echo "the total is ${sum}"

  示例3:使用-x显示执行的内容:

[root@localhost tmp]# sh -x add1_100.sh
+ declare i=
+ declare sum=
+ '[' -le '10]'
add1_100.sh: 第 行:[: 缺少 `]'
+ echo 'the total is 0'
the total is
[root@localhost tmp]#
 #!/bin/bash
#简介略
##########
declare i=
declare sum=
while [ ${i} -le ]
do
sum1=$((${sum}+${i}))
i=$((${i}+))
done
echo "the total is ${sum}"

  // 第六行最后一个中括号缺少空格!

  2.使用调试钩子

3. 使用"调试钩子"

学过C语言程序的朋友有这个印象吗:我们经常使用DEBUG宏来控制是否要输出调试信息,在shell脚本中我们同样可以使用这样的机制,如下列代码所示:

if [ “$DEBUG” = “true” ]; then
echo “debugging” #此处可以输出调试信息
fi

这样的代码块通常称之为“调试钩子”或“调试块”。在调试钩子内部可以输出任何您想输出的调试信息,使用调试钩子的好处是它是可以通过DEBUG变量来控 制的,在脚本的开发调试阶段,可以先执行export DEBUG=true命令打开调试钩子,使其输出调试信息,而在把脚本交付使用时,也无需再费事把脚本中的调试语句一一删除。

如果在每一处需要输出调试信息的地方均使用if语句来判断DEBUG变量的值,还是显得比较 繁琐,通过定义一个DEBUG函数可以使植入调试钩子的过程更简洁方便,如下面代码所示:

$ cat –n exp3.sh
DEBUG()
{
if [ "$DEBUG" = "true" ]; then
$@  
fi
}
a=
DEBUG echo "a=$a"
if [ "$a" -eq ]
then
b=
else
b=
fi
DEBUG echo "b=$b"
c=
DEBUG echo "c=$c"

在上面所示的DEBUG函数中,会执行任何传给它的命令,并且这个执行过程是可以通过DEBUG变量的值来控制的,我们可以把所有跟调试有关的命令都作为DEBUG函数的参数来调用,非常的方便。

  更多方式,待更新...

Linux入门第五天——shell脚本入门(下)基础语法之调试debug的更多相关文章

  1. Linux入门第五天——shell脚本入门(上)基本概念

    一.什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 二.shell入门 1.先导知识 变量知识补充:https://www.cnblogs. ...

  2. Linux入门第五天——shell脚本入门(下)基础语法之循环

    一.循环 1.不定循环 有两种形式: while [ condition ] <==中括号内的状态就是判断式 do <==do 是循环的开始! 程序段落 done <==done 是 ...

  3. Linux入门第五天——shell脚本入门(中)基础语法之判断与条件

    一.判断式 利用 test 命令进行执行结果的判断(例如判断是否存在该文件):关于test  test:test 示例:结合回传值 $? 进行判断:关于$?:$? [root@localhost tm ...

  4. Linux入门第四天——shell基础

    一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...

  5. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  6. linux的shell脚本入门

    Linux shell脚本入门教程 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活 的工具.Shell不仅仅是命令的收集,而且是一门非常 ...

  7. Linux Shell脚本入门--wget 命令用法详解

    Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...

  8. 【shell】shell脚本入门

    1. 前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,Linux/UNIX系统的底层及基础应用软件的核心大部分涉及Shell脚 ...

  9. Linux学习Day6:编写Shell脚本

    Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...

随机推荐

  1. December 30th 2016 Week 53rd Friday

    Life without love is like a tree without blossoms or fruit. 缺少爱的生活就像从未开花结果的枯树. Love is not only the ...

  2. 奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错

    本来打算用一下atom但是导出pdf报错,可是在预览的情况下就没有问题,顺便吐槽一下谷歌浏览器自己的markdown在线预览插件无法适配,用搜狗搭载谷歌的插件才能导出pdf,一下感觉逼格少了很多,等忙 ...

  3. Hydra初识

    Hydra词出自希腊神话,原意是是九头蛇,后被赫拉克罗斯所杀,成为赫拉克罗斯的12件伟大功绩之一.而在计算机上HC-HYDRA是一个支持多种网络服务的非常快速的网络登陆破解工具.支持ssh,RDP,M ...

  4. JVM线程状态,park, wait, sleep, interrupt, yeild 对比

    ---恢复内容开始--- JVM线程状态 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED BLOCKED是等待获得对象锁 WAIT ...

  5. IOS .a静态库的和.framework制作

    什么是库? 库是程序代码的集合,是共享程序代码的一种方式 根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking 闭源库 不公 ...

  6. 【转+修改】容联云通讯api调用短信发送调用

    转自   https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...

  7. [Noip2007]Core树网的核

    嘟嘟嘟 首先求树的直径两次bfs即可,实际上bfs就是最短路,因为树上路径是唯一的,所以用任何一种遍历方法都行(spfa和dijkstra当然也可以). 可以证明,只要求出任意一条直径就行了,为什么呢 ...

  8. 【CSS】使用浮动来创建拥有页眉、页脚、左侧目录和主体内容的首页

    有两种创建水平导航栏的方法.使用行内或浮动列表项. 如果您希望链接拥有相同的尺寸,就必须使用浮动方法. 1.构建水平导航栏的方法之一是将 <li> 元素规定为行内元素: display:i ...

  9. Spring(十四)之事务

    事务管理 一个数据库事务是一个被视为单一的工作单元的操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性.事务的概念 ...

  10. java从字符串中提取数字的简单实例

    随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取出来呢?大致有以下几种方法, ...