在大多数编程语言中都有调试工具可用于调试。 调试工具可以运行需要调试的程序或脚本,使我们可以在运行时检查脚本或程序的内部执行过程。 在shell脚本中我们没有任何调试工具,只能借助命令行选项(-n,-v和-x)的帮助来进行调试。

禁用Shell(-n选项)

The -n option, shot for noexec ( as in no execution), tells the shell to not run the commands. Instead, the shell just checks for syntax errors. This option will not convince the shell to perform any more checks. Instead the shell just performs the normal syntax check. With -n option, the shell doesn’t execute your commands, so you have a safe way to test your scripts if they contain syntax error.

-n选项,为noexec缩写,告诉shell不运行命令。此时shell只检查语法错误。 使用此选项不会让shell执行任何更多检查。由于使用-n选项后,shell不会真的执行脚本中的命令,因此我们可以安全地测试脚本中包含的语法错误。

以下示例显示如何使用-n选项。

假设我们的Shell脚本名为debug_quotes.sh

#!/bin/bashecho "USER=$USERecho "HOME=$HOME"echo "OSNAME=$OSNAME"现在使用-n选项运行脚本$ sh -n debug_quotesdebug_quotes: 8: debug_quotes: Syntax error: Unterminated quoted string

上述输出显示存在语法错误,缺少双引号。

显示脚本命令(-v选项)

-v选项告诉shell以详细模式运行。 实际上,这意味着shell将在执行命令之前回显每个命令。 这非常有用,因为它通常可以帮助找到错误。

让我们创建一个名为“listusers.sh”的shell脚本,其中包含以下内容

lpicentral@localhost:~$ cat listusers.sh#!/bin/bashcut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txtawk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt#清理临时文件/bin/rm -f /tmp/users.txt现在使用-v选项执行脚本lpicentral@localhost:~$ sh -v listusers.sh#!/bin/bashcut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txtawk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txtguest-k9ghtA Guest,,,guest-kqEkQ8 Guest,,,guest-llnzfx Guest,,,pradeep pradeep,,,mail admin Mail Admin,,,#清理临时文件/bin/rm -f /tmp/users.txtlpicentral@localhost:~$在上面的输出中,脚本输出与脚本的命令混合在一起。 但是,使用-v选项,至少可以更好地了解shell在运行脚本时所执行的操作。

结合使用 -n和-v选项

我们可以组合命令行选项(-n和-v)。 这是一个很好的组合,因为我们可以在看到脚本输出时检查脚本的语法。

让我们考虑以前使用过的脚本“debug_quotes.sh”lpicentral@localhost:~$ sh -nv debug_quotes.sh#!/bin/bash#shows an error.echo "USER=$USERecho "HOME=$HOME"echo "OSNAME=$OSNAME"debug_quotes: 8: debug_quotes: Syntax error: Unterminated quoted stringlpicentral@localhost:~$

跟踪脚本执行(-x选项)

-x选项是xtrace的缩写,它告诉shell在执行替换步骤后回显每个命令。 因此,我们可以看到变量和命令的值。 通常,仅此选项有助于诊断问题。

在大多数情况下,-x选项提供有关脚本的最有用信息,但它可能会导致大量输出。 以下示例显示了此选项的实际效果。

lpicentral@localhost:~$ sh -x listusers.sh+ cut -d :+ -f1,5,7 /etc/passwdgrep -v sbin+ sort+ grep sh+ awk -F: { printf ( "%-12s %-40s\n", $1, $2 ) } /tmp/users.txtguest-k9ghtA Guest,,,guest-kqEkQ8 Guest,,,guest-llnzfx Guest,,,pradeep pradeep,,,mail admin Mail Admin,,,+ /bin/rm -f /tmp/users.txtlpicentral@localhost:~$

linux中调试脚本,在Linux下调试 Shell 脚本相关推荐

  1. centos7 ssr一键脚本_RHEL7(Centos7)下使用shell脚本一键部署服务

    今天配置服务觉得有些麻烦,想着写一个能一键配置nfs服务端的shell脚本,当然在安装之前需要配置一个yum源,所以我一并将这些功能写在了一个shell脚本里. 脚本如下: #author:Roya ...

  2. linux上源码安装mysql,Linux中源码包安装MySQL的shell脚本

    #!/bin/bash #安装MYSQL yum -y install ncurses-devel yum -y install autoconf tar zxf /cmake--C / cd /cm ...

  3. linux shell rsync,linux – 如何在我的下面的shell脚本中使用rsync而不是scp来复制文件?...

    我正在使用scp并行使用GNU并行复制文件与我的下面的 shell脚本,它工作正常. 我不知道如何在下面的shell脚本中使用rsync代替scp.我试图看看rsync与传输速度方面的scp相比是否会 ...

  4. linux下的shell脚本

    linux下的shell脚本 一.Shell概述 二.Shell 解析器 三.Shell脚本入门 1. 脚本格式 2. 第一个Shell脚本:helloworld 3. 第二个Shell脚本:多命令处 ...

  5. linux下执行shell脚本文件,Linux下使用shell脚本自动执行脚本文件

    搜索热词 以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 #将tomcat中 ...

  6. linux中怎么添加输入法,linux下添加中文输入法

    一.安装环境 查看linux版本号 [ztteng@ztteng ~]$ lsb_release -a LSB Version:    :core-4.0-ia32:core-4.0-noarch:g ...

  7. linux下的shell脚本,linux下的shell脚本的使用

    什么是shell? Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户.这种对话方式可是交互 ...

  8. Linux下的shell脚本实战之用户创建

    Linux下的shell脚本实战之用户创建 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.该脚本提示用户创建用户名和密码 2.判断输入的用户名是 ...

  9. linux实现学生信息管理系统,Linux下基于shell脚本实现学生信息管理系统

    LINUX Linux操作系统 Linux下基于shell脚本实现学生信息管理系统 #该管理系统是参考两位博主(时间有点远了,我忘了,请博主看到后联系我)后自行修改添加的.登录过程还有很多不完善,我就 ...

  10. 【Linux命令】《鸟哥Linux基础》第十二章 学习shell脚本

    第十二章 学习shell脚本 通常利用shell脚本完成服务器的检测工作,不涉及大量运算. 12.1 简单shell脚本介绍 12.2 简单shell脚本练习 12.2.1 简单范例 范例1:永远的开 ...

最新文章

  1. 微信公众号 获得多客服使用权限
  2. job history 的查看
  3. T-SQL RIGHT JOIN
  4. 翻车实录之Nature Medicine新冠单细胞文献|附全代码
  5. margin 实现水平居中,垂直居中原理
  6. zoj3715 Kindergarten Election
  7. Android 系统应用Setting开发总结
  8. 解决win7检测不到第二个显示器的方法
  9. 对 SharePoint WebService 的调用
  10. 蓝桥杯题目 黑色星期五
  11. 按键精灵打怪学习-窗口绑定技能
  12. MYSQL查询语句大全集锦
  13. 较低成本的ISO7637-2 5A 5B抛负载保护方案
  14. python输出列表元素_怎样用一行python打印列表所有元素
  15. ES6 对象数组查找某一个对象
  16. 计算机入门学习编程的建议
  17. 用Python学《微积分B》(多元函数Taylor公式)
  18. CENTOS linux kernel 内核编译
  19. U盘制作-BGA焊接练习
  20. 嵌入式行业怎么样,有什么好的就业方向?

热门文章

  1. 重载new、delete和强制类型转换运算符()
  2. 易语言模拟键盘(ctrl+v)_键盘快捷键使用大全
  3. 项目需求 | PC VR头戴显示器实时三维坐标(项目经费20万)
  4. 李飞飞团队最新研究,真实场景中识别物体具体属性,连表面纹理都识别出来了...
  5. 那些珍贵的「视觉SLAM」课程资料总结(补充版/完整版)
  6. C++ vector容器
  7. GROMACS运行参数之npt.mdp文件详解
  8. 第三十五课.基于贝叶斯的深度学习
  9. 第三课.使用简单的NN模拟fizzbuzz
  10. Latex中的一些表格用法总结(二)——行列式的表格,表格的切分和合并