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}\t"
	else
	set -x		==>调试开始的地方
          echo -en "${COLOR}${j}x${i}=$((${j}*${i}))${RES}\t"
	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=12\e[0m\t‘
3x4=12	+ set +x
+ echo -en ‘\e[47;30m4x4=16\e[0m\t‘
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)最关键的还是要语法熟练,养成良好的编码习惯,提高编程思想,将错误扼杀在萌芽状态之中,
从而降低错误率,减轻调试的负担,提高开发效率。

shell编程 15 --- shell 脚本调试技巧

上一篇:Linux 源码包服务的管理


下一篇:shell快捷键