环境准备 - 脚本调试方法

调试方法

静态检查语法错误

  • 读一遍脚本中的命令但不执行,用来检查脚本中的语法错误
sh -n script.sh
* 自己测试即使脚本语法有错,也没打印任何信息

动态运行逻辑错误

  1. 运行一条命令
sh -c "echo 'hello'"
  • 运行一条命令,没什么作用。
  1. 运行脚本,输出运行结果和原始代码;
sh -v script.sh
  • 一边执行脚本,一边将执行过的脚本命令打印到标准输出端。
  1. 运行脚本,输出运行结果和替换变量后的代码。
sh -x script.sh
  • 提供跟踪执行信息,将执行的每一条命令(替换变量成内存数据)和结果一次打印出来

使用工具调试

ShellCheck
  • 是一个Shell脚本分析工具,可以为bash/sh shell脚本提出警告和建议。官网:http://www.shellcheck.net/ GitHub:https://github.com/koalaman/shellcheck
ExplainShell
  • write down a command-line to see the help text that matches each argument, 官网:https://www.explainshell.com/
BASH Debugger
  • 主页:http://bashdb.sourceforge.net/
  • 下载地址:https://sourceforge.net/projects/bashdb/files/
  • 使用手册:http://bashdb.sourceforge.net/bashdb-man.html
  • 借助第三方工具bashd可以更加精细地调试Shell脚本。具有断点、单步执行、观察变量等功能。
    下载时需根据所使用的bash版本选择相应的bashdb,否则会提示因为版本不符合而无法安装。

使用这些选项有三种方法

  1. 在命令行提供参数:$sh -x script.sh
  2. 脚本开头提供参数:#!/bin/sh -x
  3. 在脚本中用set命令启用or禁用参数:其中set -x表启用,set +x表禁用

另:在写脚本的时候,需特别注意添加空格或换行或分号
eg text命令: $[ 5 -lt 10 ]左方括号后须有空格,右方括号前也须有空格
shell脚本中函数定义: foo() {后须有空格或换行
shell脚本中,若同一行内写有两条命令须加分号
与C语言不同的是,shell脚本中,返回值0表真,1表假。

调试时打印代码行号和函数名

  • bash 下可以设置环境变量 $PS4 实现。
* 为sh -x追加行号显示:
export PS4='+{$LINENO:${FUNCNAME[0]}} '
* $LINENO,代表shell脚本的当前行号
* $FUNCNAME,函数的名字,包含了整个调用链上所有的函数的名字,[0]当前函数,[1]上个调用函数...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值