zoukankan      html  css  js  c++  java
  • shell编程 15 --- shell 脚本调试技巧

    shell 脚本调试技巧

    1.使用dos2unix命令处理

    使用dos2unix命令处理在Windows下开发的脚本

    [root@zabbix ~]# man cat
           -v, --show-nonprinting
                  use ^ and M- notation, except for LFD and TAB
    2715529211[root@zabbix ~]# cat -v test.txt |head
    1009781813^M
    2829598589^M
    1070069937^M
    

    你可能会发现,对于在Windows下开发的脚本,明明经检查没有发现问题,但就是在执行时会出现莫名其妙的语法错误。

    这时,最好执行dos2unix格式化一下。执行dos2unix格式化是一个很好的习惯。

    [root@zabbix ~]# yum install -y dos2unix
    [root@zabbix ~]# dos2unix test.txt
    dos2unix: converting file test.txt to Unix format ...
    [root@zabbix ~]# cat -v test.txt |head
    1009781813
    2829598589
    1070069937  ====> ^M没有了,回归正常
    

    2. 利用echo调试一个简单的判断脚本

    [root@zabbix scripts]# cat com_if.sh 
    #!/bin/bash
    
    read -p "pls input two nums:" num1 num2
    a=$num1
    b=$num2
    echo $a  $b		==> 增加打印输出,确认变量值是否符合要求
    exit			==> 退出脚本,目的是不执行后面的代码
    
    ## no.1 -- check num of args
    if [ -z "$a" -o -z "$b" ] ;then
        echo "USAGE: sh "$0" num1 num2"
        exit 1
    fi
    
    

    3. 使用bash命令参数调试

    最重量级的方法bash或sh的参数调试方法

    sh [-nvx] script.sh
    [root@zabbix scripts]# set |grep PS[1-9]
    PS1='[u@h W]$ '
    PS2='> '
    PS4='+${LINENO}'
    [root@zabbix scripts]# export PS4='+${LINENO}'  === -x参数调试时,设置PS4可以增加行号
    [root@zabbix scripts]# sh -x check_web.sh 
    

    参数说明如下。

    -n:不会执行该脚本,仅查询脚本语法是否有问题,并给出错误提示。

    -v:在执行脚本时,先将脚本的内容输出到屏幕上,然后执行脚本,如果有错误,也会给出错误提示。

    -x:将执行的脚本内容及输出显示到屏幕上,这是对调试很有用的参数。推荐使用

    4. 使用set命令调试部分脚本内容

    set命令也可以用于辅助脚本调试。以下是set命令常用的调试选项。

    set -n:读命令但并不执行。

    set -v:显示读取的所有行。

    set -x:显示所有命令及其参数。

    提示:通过set -x命令开启调试功能,而通过set +x关闭调试功能。

    [root@zabbix 0511]# cat for_nn.sh 
    #!/bin/bash
    COLOR='e[47;30m'
    RES='e[0m'
    for ((i=1;i<=9;i++))
    do
        for ((j=1;j<=i;j++))
        do
    	if [ `echo $((${j}*${i}))` -le 9 ];then
    	  echo -en "${COLOR}${j}x${i}=$((${j}*${i})) ${RES}	"
    	else
    	set -x		==>调试开始的地方
              echo -en "${COLOR}${j}x${i}=$((${j}*${i}))${RES}	"
    	set +x		===> 调试结束的地方
    	fi
        done
        echo
    done
    [root@zabbix 0511]# sh for_nn.sh 
    1x1=1 	
    1x2=2 	2x2=4 	
    1x3=3 	2x3=6 	3x3=9 	
    1x4=4 	2x4=8 	+ echo -en 'e[47;30m3x4=12e[0m	'
    3x4=12	+ set +x
    + echo -en 'e[47;30m4x4=16e[0m	'
    4x4=16	+ set +x
    ...
    

    提示:加了set -x,在运行脚本的时候,就不需要使用sh -x了。

    5. 其他调试Shell脚本的工具

    (1)Shell调试工具:

    bashdbShell调试器bashdb是一个类似于GDB的调试工具,可以完成对Shell脚本的断点设置、单步执行、变量观察等许多功能,但是很少使用。

    (2)Shell调试工具:

    shellcheckshellcheck是一个可检查sh/bash脚本和命令语法的小工具,地址为:http://www.shellcheck.net/,也很少使用。

    小结:

    1)要记得首先用dos2unix对脚本(从其他地方拿来用的)进行格式化。
    2)执行脚本根据报错来调试时,要知道有时所报错误会不准确,应多关联上下文查看。
    3)可通过sh -x命令调试整个脚本,且显示执行过程。
    4)set -x和set +x命令用于调试部分脚本的执行过程(可在脚本中设置)。
    5)可通过echo命令输出脚本中要确认的变量及相关内容,然后紧跟着使用exit退出,
    不执行后面程序,这种方式便于一步步跟踪脚本,对于逻辑错误的调试比较好用。写法即“echo $var;exit”
    6)最关键的还是要语法熟练,养成良好的编码习惯,提高编程思想,将错误扼杀在萌芽状态之中,
    从而降低错误率,减轻调试的负担,提高开发效率。

  • 相关阅读:
    通过16道练习学习Linq和Lambda
    sql server 2000,一个数据库最多能建多少张表,每张表最多能建多少个字段?
    通过EPPlus导出Excel文件
    SQLServer找出执行慢的SQL语句
    C# where用法
    双击桌面Internet Explorer图标时创建快捷方式
    xxxx.accessor: The reference to 'xxxx' was not found in the list of this projects references
    .NET设计模式(3): 抽象工厂模式
    关于Windows Installer的一些知识点
    详细介绍"使用DB Attach的方式来升级MOSS2007中SSP的user profile和mysite至SharePoint 2010"的文章
  • 原文地址:https://www.cnblogs.com/moox/p/12899930.html
Copyright © 2011-2022 走看看