新手写了一个 hello world 小脚本,如何能调试运行在 Linux 或者类 UNIX 的系统上的 bash shell 脚本呢?

这是 Linux / Unix 系统管理员或新用户最常问的问题。shell 脚本调试可能是一项繁琐的工作(不容易阅读)。调试 shell 脚本有多种方法。

您需要传递-x或-v参数,以在 bash shell 中浏览每行代码。

让我们看看如何使用各种方法调试 Linux 和 UNIX 上运行的脚本。

-x 选项来调试脚本

用 -x 选项来运行脚本:

$ bash -x fcbu.com.sh

使用 set 内置命令

bash shell 提供调试选项,可以打开或关闭使用 set 命令:

set -x : 显示命令及其执行时的参数。

set -v : 显示 shell 输入行作为它们读取的

可以在 shell 脚本本身中使用上面的两个命令:

#!/bin/bash

# turn on debug mode

set -x

for f in *

do

file $f

done

# turn OFF debug mode

set +x

ls

在脚本的起始位置可以用以下代码调试:

#!/bin/bash -xv

使用bash智能调试功能

首先添加一个叫做 _DEBUG 的特殊变量。当你需要调试脚本的时候,设置 _DEBUG 为 on:

在脚本的开头放置以下赋值和函数:

_DEBUG="on"

function DEBUG()

{

[ "$_DEBUG" == "on" ] &&  $@

}

现在,只要你需要调试,只需使用 DEBUG 函数如下:

DEBUG echo "File is $filename"

或者:

DEBUG set -x

Cmd1

Cmd2

DEBUG set +x

当调试完(在移动你的脚本到生产环境之前)设置 _DEBUG为off或非 'on' 的任何字符。不需要删除调试行。

示例脚本:

#!/bin/bash

_DEBUG="on"

function DEBUG()

{

[ "$_DEBUG" == "on" ] &&  $@

}

DEBUG echo 'Reading files'

for i in *

do

grep 'something' $i > /dev/null

[ $? -eq 0 ] && echo "Found in $i file"

done

DEBUG set -x

a=2

b=3

c=$(( $a + $b ))

DEBUG set +x

echo "$a + $b = $c"

保存并关闭文件。运行脚本如下输出:

Reading files

Found in xyz.txt file

+ a=2

+ b=3

+ c=5

+ DEBUG set +x

+ '[' on == on ']'

+ set +x

2 + 3 = 5

现在设置 _DEBUG 为 off(你需要编辑该文件):

_DEBUG="off"

运行脚本,输出:

Found in xyz.txt file

2 + 3 = 5

以上是一个简单但非常有效的技术。还可以尝试使用 DEBUG 作为别名而不是函数。

linux如何调试脚本文件目录,如何在Linux下调试Bash Shell脚本的方法相关推荐

  1. Linux shell 对话框,如何在 Bash Shell 脚本中显示对话框

    原标题:如何在 Bash Shell 脚本中显示对话框 这个教程给出几个如何使用类似zenity和whiptail的工具在Bash Shell 脚本中提供消息/对话框的例子.使用这些工具,你的脚本能够 ...

  2. Linux下如何执行Shell脚本

    Linux下如何执行Shell脚本 Linux下你可以有两种方式执行Shell脚本: 1.用shell程序执行脚本:根据你的shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等 ...

  3. 解决Linux下无法利用shell脚本启动conda虚拟环境问题

    解决Linux下无法利用shell脚本启动conda虚拟环境问题 问题 直接在脚本中激活conda环境时遇到了一个问题 解决 查看.bashrc文件 .bashrc文件在 /home/用户名 里面,因 ...

  4. Linux——Bash Shell脚本 for循环

    1.创建和执行Bash Shell脚本 (1)借助Bash Shell环境和脚本编写功能,将Linux命令与shell脚本组合在一起,从而轻松的解决重复而困难的实际问题,Bash shell脚本最简单 ...

  5. Linux VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本

    Linux VPS服务器根据CPU负载及内存占用自动重启的bash shell脚本 288月2011 0 主要用于监控 linux 服务器负载及内存占用,如 MySQl.php-fpm,当负载或内存占 ...

  6. Linux系统防CC攻击自动拉黑IP增强版Shell脚本

    Linux系统防CC攻击自动拉黑IP增强版Shell脚本 文章目录 一.Shell代码 二.执行脚本 三.效果测试 四.附加说明 前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原 ...

  7. Linux系统防CC攻击自动拉黑IP增强版(Shell脚本)

    这篇文章主要介绍了Linux系统防CC攻击自动拉黑IP增强版(Shell脚本),需要的朋友可以参考下 前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原因是因为360网站卫士的缓存 ...

  8. linux shell 执行目录,bash shell脚本执行的几种方法

    bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考. 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一: ...

  9. linux shell 一行 for,BASH shell脚本回显到同一行输出

    我有一个简单的BASH shell脚本,它检查curl命令的HTTP响应代码. 逻辑很好,但我坚持"简单地"打印出"输出". 我正在使用GNU bash,版本3 ...

最新文章

  1. python优化算法工具包_这可能是史上最全的 Python 算法集(建议收藏)
  2. springbatch的writer、processor、reader复杂太难用?使用tasklet更方便!
  3. java semaphore 等待时间_一个java同步工具类Semaphore的详解
  4. 时隔6年,NASA再造仿人机器人,或将在太空工作,应对严苛环境
  5. 面向对象编程──走错了路?
  6. Dropout抑制过拟合
  7. 史玉柱:我是怎么做游戏策划的
  8. BCB使用线程删除目录中的图片
  9. php mysql 命令行模式_phpstudy(mysql命令行的增删改查)
  10. 第10课:JSP指令 Page指令 (JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
  11. mysql默认编码改为gbk_如何设置Mysql数据库默认的字符集编码为GBK
  12. 格拉布斯检验法matlab,格拉布斯检验法MATLAB算法
  13. 新概念英语第二册课文电子版_新概念英语第二册:课文+音频+教学视频合集(可下载)...
  14. 在字节实习8个月后,成功转正
  15. 如何让你的程序员不要厌倦工作?
  16. 快速获取今天是星期几
  17. VMware pro安装CentOS 7
  18. java红牛农场答案_Java面向对象程序设计实验指导与习题解答
  19. CA Server证书申请与颁发 Apache2 HTTPS
  20. 论文《Face Alignment at 3000 FPS via Regressing Local Binary Features》笔记

热门文章

  1. IOS的一些文件操作。(沙箱) 在Documents目录下创建文件
  2. 视频时代的大数据:问题、挑战与解决方案
  3. 数据中台VS业务中台、数据中台VS数据仓库,到底有什么区别?
  4. 做决定前别拍脑袋:两个成功案例看懂A/B测试
  5. 人人都能看懂的机器学习!3个案例详解聚类、回归、分类算法
  6. LwIP之ICMP协议
  7. libjpeg移植到arm
  8. 罗马音平假名片假名转换器_记不住五十音的你,你肯定需要这套日语五十音谐音巧记法...
  9. python生成簇_使用Python复现SIGKDD2017的PAMAE算法(并行kmedoids算法)
  10. 4万次下载,我的这本电子书连续数月蝉联阿里云下载榜冠军!!!