首页 > 代码库 > SHELL脚本攻略(读书笔记)--1.10 调试脚本

SHELL脚本攻略(读书笔记)--1.10 调试脚本

使用sh -x或这bash -x可以调试脚本,调试时会为每一行输出并输出状态,通过它也可以看出脚本中命令的执行顺序。也可以在脚本中使用set设置调试区域。

例如调试上面的time_calculate.sh脚本。

[root@xuexi tmp]# sh -x time_calculate.sh

++ date +%N

+ start_time=086352877

+ find / -type f -name ‘*.db‘

++ date +%N

+ end_time=352144614

++ echo ‘scale=6;352144614/10^6‘

++ bc

+ diff_time=352.144614

+ echo 352.144614

352.144614

如果哪个地方执行出错将会显示出来。

例如,修改time_calculate.sh脚本,将计算部分修改成错误的表达式,并设置这部分调试。

[root@xuexi tmp]# cat time_calculate.sh

#!/bin/bash

#以微秒为单位计算

start_time=$(date +%N)

find / -type f -name "*.db" &>/dev/null

end_time=$(date +%N)

#diff_time=$(echo "scale=6;$((end_time-strat_time))/10^6" | bc)

set -x   ?从这里开始调试

diff_time=$(echo "scale=6;$(end_time-strat_time)/10^6" | bc)   ?将这里修改出错

echo $diff_time

set +x   ?这里结束调试

执行脚本:

[root@xuexi tmp]# sh time_calculate.sh

++ bc

+++ end_time-strat_time

time_calculate.sh: line 8: end_time-strat_time: command not found  ?前面没加号+的就是错误的地方。

++ echo ‘scale=6;/10^6‘

(standard_in) 1: syntax error

+ diff_time=

+ echo

 

+ set +x

因为/bin/bash也可以执行-x调试,所以直接在脚本的开头部分#!/bin/bash加上-x就可以总是调试。即#!/bin/bash -x。

SHELL脚本攻略(读书笔记)--1.10 调试脚本