首页 > 代码库 > 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 调试脚本