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 脚本使用工具,调试起来应该会更方便,但是我也没使用过,前面的饿调试方式基本够用了,以后有使用到合适的调试工具,我在补上
标签:脚本,shell,echo,命令,trap,方法,调试 From: https://www.cnblogs.com/jzcn/p/17768914.html