博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Shell 程序调试
阅读量:6150 次
发布时间:2019-06-21

本文共 1670 字,大约阅读时间需要 5 分钟。

Linux Shell 程序调试

       Shell程序的调试是通过运行程序时加入相关调试选项或在脚本程序中加入相关语句,让shell程序在执行过程中显示出一些可供参考的“调试信息”。当然,用户也可以在shell程序中的适当位置加入一些echo命令用于调试与跟踪。

 

方法一:在运行脚本程序时加入调试选项:

【用法】bash –选项 ./shellScript.sh

几个常用的调试选择项如下:
        -e :如果一个命令返回一个非0退出状态值(失败),就退出。
        -n : 不需要执行脚本只是检查语法结构,返回所有的语法错误信息。
        -u : 置换时把未设置的变量看作出错。
        -v : 当读入shell输入行时,把它们显示出来。
        -x : 执行命令时,把命令和它们的参数显示出来。
 

方法二:在脚本程序中通过调试程序:

【用法】set –选项 set +选项      #set命令的常用选项同上

        以在Shell程序内部用“set -选择项”的形式引用,而“set +选择项”则将禁止该选择项起作用。如果只想对程序的某一部分使用某些选择项时,则可以将该部分用上面两个语句包围起来。

(1)未置变量退出(-u)和立即退出(-e)

  未置变量退出特性允许用户对所有变量进行检查,如果引用了一个未赋值的变量就终止Shell程序的执行。Shell通常允许未置变量的使用,在这种情况下,变量的值为空。如果设置了未置变量退出选择项,则一旦使用了未置变量就显示错误信息,并终止程序的运行。未置变量退出选择项为-u。

  当Shell运行时,若遇到不存在或不可执行的命令、重定向失败或命令非正常结束等情况时,如果未经重新定向,该出错信息会显示在终端屏幕上, 而Shell程序仍将继续执行。要想在错误发生时迫使Shell程序立即结束,可以使用-e选项将Shell程序的执行立即终止。

(2)Shell程序的跟踪(-v或-x)

  调试Shell程序的主要方法是利用Shell命令解释程序的-v或-x选项来跟踪程序的执行。-v选择项使Shell在执行程序的过程中,把它读入的每一个命令行都显示出来,而-x选择项使Shell在执行程序的过程中把它执行的每一个命令在行首用一个+加上命令名显示出来。并把每一个变量和该变量所取的值也显示出来。因此,它们的主要区别在于:在执行命令行之前无-v,则显示出命令行的原始内容,而有-v时则显示出经过替换后的命令行的内容。

 

【例子】

./iftest.sh:

#! /bin/bashiftest(){    if [ $# -ne 1 ]     then        echo "Usage: $0 dir "        exit 1    fi         # set -v or set -x      #若选择方法二,则取消注释,并选择其中一个set命令    if [ -d "$1" ]    then        ls -l $1        exit 0    fi      # set +v or set +x     #若选择方法二,则取消注释,并选择其中一个set命令    echo "Warn:$1 is not a directory!"    exit 2} iftest ..

方法一运行结果:

bash -v ./iftest.sh

bash -x ./iftest.sh

注:$#=1    $1=..  

 

方法二运行结果:  

取消iftest.sh程序中的注释,并且只选择set -x 和 set +x命令,表明只对第二个if..fi语句块进行调试。

./iftest.sh

 

 

感谢:http://www.cnblogs.com/hicome/archive/2007/10/30/943002.html

转载于:https://www.cnblogs.com/CherishFX/p/4558958.html

你可能感兴趣的文章
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>
图解SSH原理及两种登录方法
查看>>
[转载] 七龙珠第一部——第058话 魔境圣地
查看>>
【总结整理】JQuery基础学习---样式篇
查看>>
查询个人站点的文章、分类和标签查询
查看>>
基础知识:数字、字符串、列表 的类型及内置方法
查看>>
JSP的隐式对象
查看>>
JS图片跟着鼠标跑效果
查看>>
[SCOI2005][BZOJ 1084]最大子矩阵
查看>>
学习笔记之Data Visualization
查看>>
Leetcode 3. Longest Substring Without Repeating Characters
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
Android源码学习之观察者模式应用
查看>>
416. Partition Equal Subset Sum
查看>>
Django之FBV与CBV
查看>>