面试题答案
一键面试使用 echo
结合自定义日志函数调试
- 在关键位置添加
echo
输出:在循环和条件判断的关键节点,如循环开始、结束,条件判断的入口和不同分支处,使用echo
输出相关变量的值和提示信息,以了解程序执行的流程。例如:
for (( i=0; i<10; i++ )); do
echo "进入循环,当前 i 的值为: $i"
if [ $i -eq 5 ]; then
echo "i 等于 5,进入此分支"
else
echo "i 不等于 5,进入 else 分支"
fi
echo "本次循环结束"
done
- 自定义日志函数:为了使日志更规范和便于管理,可以创建一个自定义的日志函数。比如:
log() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "[${timestamp}] $*" >> debug.log
}
for (( j=0; j<5; j++ )); do
log "开始新的循环,j 的值为: $j"
if [ $j -gt 2 ]; then
log "j 大于 2,进入该条件分支"
fi
done
这样可以将日志记录到 debug.log
文件中,并添加时间戳,方便后续分析。
trap
命令在复杂脚本调试中的作用及运用
- 作用:
trap
命令用于指定在接收到特定信号时要执行的命令。在复杂脚本调试中,它可以帮助捕获异常情况,比如脚本执行过程中收到中断信号(如用户按Ctrl+C
),可以在捕获信号后执行一些清理工作或输出调试信息,避免脚本异常终止导致信息丢失,有助于定位问题。 - 运用示例:
trap 'echo "脚本接收到中断信号,即将终止"; cat debug.log' SIGINT
# 复杂脚本内容
for (( k=0; k<100; k++ )); do
# 复杂的循环和条件判断
if [ $k -eq 50 ]; then
echo "k 达到 50"
fi
done
上述示例中,当脚本接收到 SIGINT
(中断信号)时,会先输出提示信息,然后显示 debug.log
的内容,以便开发者了解脚本中断前的执行状态。