一、调试方法概述
在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