Shell之调试

一、调试方法概述

在Shell脚本开发过程中,难免会犯各种各样的错误,这时需要的就是能对错误快速定位以及修复,Shell脚本中有以下的调试方法可供参考:

  • 防止是windows下或者其他人的脚本,先使用dos2unix进行脚本格式化
  • 根据执行的脚本报错信息直接定位
  • sh -x进行整个脚本内容调试
  • set -x和set +x对脚本中局部内容进行调试
  • 使用echo(紧跟exit)命令进行打印调试

二、调试实践

 1、dos2unix脚本格式化

如果脚本是在windows下开发,最好是使用dos2unix进行格式化一下:

[root@localhost ~]# yum install -y  dos2unix
Loaded plugins: fastestmirror
base                                                  | 3.6 kB     00:00     
...
[root@localhost cal_length]# dos2unix cal_str.sh
dos2unix: converting file cal_str.sh to Unix format ...

2、根据执行的脚本报错信息直接定位

# 脚本中if判断后少一个空格
[root@localhost cal_length]# cat array_1.sh 
#!/bin/sh
arr=(I am looking for you)
for word in ${arr[*]}
do
  if [${#word} -le 3 ]
  then
     echo $word
  fi
done

# 执行脚本直接报错,根据报错信息纠正
[root@localhost cal_length]# sh array_1.sh 
array_1.sh: line 5: [1: command not found
array_1.sh: line 5: [2: command not found
array_1.sh: line 5: [7: command not found
array_1.sh: line 5: [3: command not found
array_1.sh: line 5: [3: command not found

3、sh -x进行整个脚本内容调试

# 执行过程很清晰
[root@localhost cal_length]# sh -x array_1.sh 
+ arr=(I am looking for you)
+ for word in '${arr[*]}'
+ '[' 1 -le 3 ']'
+ echo I
I
+ for word in '${arr[*]}'
+ '[' 2 -le 3 ']'
+ echo am
am
+ for word in '${arr[*]}'
+ '[' 7 -le 3 ']'
+ for word in '${arr[*]}'
+ '[' 3 -le 3 ']'
+ echo for
for
+ for word in '${arr[*]}'
+ '[' 3 -le 3 ']'
+ echo you
you

4、set -x和set +x对脚本中局部内容进行调试

#!/bin/sh
#脚本中添加set -x和set +x,这样只会调试之间的脚本
set -x
arr=(I am looking for you)
set +x
for word in ${arr[*]}
do
  if [ ${#word} -le 3 ]
  then
     echo $word
  fi
done

# 脚本过程输出
[root@localhost cal_length]# sh -x array_1.sh 
+ set -x
+ arr=(I am looking for you)
+ set +x
I
am
for
you

5、使用echo(紧跟exit)命令进行打印调试

#!/bin/sh
arr=(I am looking for you)
echo ${arr[*]} # 加上echo进行调试,如果正常输出,脚本之前都没问题
exit # 直接退出脚本
for word in ${arr[*]}
do
  if [ ${#word} -le 3 ]
  then
     echo $word
  fi
done

# 执行脚本
[root@localhost cal_length]# sh array_1.sh 
I am looking for you
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/shenjianping/p/14395511.html