shell 调试方法
shell 在 linux 系统中比较常见,简单的脚本可以看着确实没难度,但是当脚本功能复杂后,看起来就不那么流畅了,所以掌握一些调试方式还是很有必要的,这里我收集了一次常用的调试方式。
shell调试的方法
-
echo 语句
通过在脚本代码中插入 echo 语句输出变量值、执行状态等信息,在脚本中直接打印还是比较方便的 -
shell 脚本本身提供的一些方法
- -n 读一遍脚本中的命令但不执行,主要用于检查脚本中的语法错误。
- -v 一边执行脚本,一边将执行过程中的脚本命令打印到标准输出。
- -x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。
- +x 关闭跟踪执行信息。
-
trap 命令
使用 trap 命令可以捕获并处理脚本中的信号或错误。通过在脚本中设置 trap 命令,可以在发生特定事件时执行自定义操作,如输出日志、打印变量值等。 -
调试工具
使用 trap 命令可以捕获并处理脚本中的信号或错误。通过在脚本中设置 trap 命令,可以在发生特定事件时执行自定义操作,如输出日志、打印变量值等。
实验一
使用 echo 输出变量信息,脚本命令如下
#!/bin/bash fruits=("apple" "banana" "orange") for fruit in "${fruits[@]}" do echo "I like $fruit" done
输出如下所示:
实验二
在执行的时候使用增加 -x 参数,开启调试信息输出,命令如下
bash -x test.sh
输出如下所示:
实验三
在解释器参数中加上调试参数,这里的功能和命令中直接添加一样,所以输出的结果也实验二相同,添加的方式如下
#!/bin/bash -xv #!/bin/sh -x
输出如下所示:
实验四
在脚本中使用 set -x
可以启用跟踪模式,将执行的每一行命令及其扩展结果显示出来,方便查看具体的执行流程。使用 set +x
可以关闭跟踪模式,所以可以使用此方法对其中一部分脚本进行调试,脚本如下
#!/bin/bash set -x fruits=("apple" "banana" "orange") set +x for fruit in "${fruits[@]}" do echo "I like $fruit" done
输出如下所示:
实验五
-
trap 是shell自带的捕获信号量的指令。trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。
-
命令格式如下:
trap [-lp] [ARG] [SIGSPECS] # -l 列出信号名称与对应的数值 # -p 列出信号与其绑定的命令列表 # ARG 与指定信号绑定的命令。如果 ARG 为空字符串,表示忽略信号;如果 ARG 不指定(缺省)或为-,表示执行信号的默认动作 # SIGSPECS 信号列表,可以是信号名称,也可以是信号对应的数值。可用信号可以使用trap-l查看 -
测试脚本
#!/bin/bash # 定义错误处理函数 handle_error() { echo "An error occurred in the script!" echo "Printing error message and exiting..." echo "Error message: $1" exit 1 } # 设置错误处理函数为脚本的错误处理器 trap 'handle_error "$BASH_COMMAND"' ERR echo "Start script" # 通过故意引发错误来测试错误处理 unknown_command echo "This line will not be executed" echo "End script" -
测试结果
实验六
也可以使用相关的 shell 脚本使用工具,调试起来应该会更方便,但是我也没使用过,前面的饿调试方式基本够用了,以后有使用到合适的调试工具,我在补上
本文来自博客园,作者:浇筑菜鸟,转载请注明原文链接:https://www.cnblogs.com/jzcn/p/17768914.html
如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! cn_jiaozhu@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2022-10-17 LVGL scroll超出父界面不隐藏