您的位置:首页 > 运维架构 > Shell

Shell脚本调试方法

2017-03-05 10:54 369 查看
Shell脚本调试的主要工作是发现引发脚本报错的原因以及在脚本代码中定位发生错误的行,使程序按预期的逻辑完成工作。下面介绍几种主要的方法。

1、sh脚本调试选项

语法:sh [-n] [-x] [-v] Script.sh

参数说明:

-n: 检查shell脚本中是否存在语法错误。只读取shell脚本,但不执行。
-x:提供跟踪执行信息,将执行的每一条命令、每一个变量的值和结果一次打印出来
-v:一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。


使用方法:

(1)检查脚本语法是否存在错误

$ sh -n Myscript.sh


(2)检查shell代码命令执行和变量输出情况

$ sh -xv Myscript.sh
#!/bin/bash

num1=20
+ num1=20
num2=15
+ num2=15
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
else
echo "${num1} is greater than ${num2}"
fi
+ '[' 20 -lt 15 ']'
+ echo '20 is greater than 15'
20 is greater than 15


2、echo/printf输出调试方法

在认为可能有问题的代码前后使用echo/printf打印出变量输出情况。特别是变量在用作判断条件情况。

#!/bin/bash

#echo "The variable num equal:$num"
if [ $num -eq 5 ];then
echo "The number equal to 5" #假设这条语句没有输出,就把变量num值打出来看看
else
echo "The number not equal to 5"
fi


3、set -x调试方法

shell的执行选项除了可以在启动shell时指定外,也可以在脚本中用set命令来指定。 "set -参数"表示启用某选项,"set +参数"表示关闭某选项。有时候我们并不需要在启动时用"-x"选项来跟踪所有的命令行,这时我们可以在脚本中使用set命令,如以下脚本片段所示:

#!/bin/bash

set -x # #启动"-x"选项 要跟踪的程序段
num=15
if [ $num -eq 5 ];then
echo "The number equal to 5"
else
echo "The number not equal to 5"
fi
set +x  #关闭"-x"选项


执行结果输出如下:

$ ./Myscript.sh
+ num=15
+ '[' 15 -eq 5 ']'
+ echo 'The number not equal to 5'
The number not equal to 5
+ set +x


如果要调试输出所有代码,可以在代码开头处添加set -x。效果等同于shell -xv myScript.sh

4、删减代码方法

这种方法通常适用于使用上述两种方法还是定位不出问题的情况,因为有些报错确实很不明显,在代码量太多的情况下又不好调试。可以尝试删除一部分代码,缩小代码定位范围。反过来说明,代码量越少的情况下调试效率越高。

5、shellcheck代码静态检查工具

shellcheck工具个人用过确实挺好用的。但是在公司外没有找到一个可执行的shellcheck工具。源文件编译安装需要cabal,我在我的SuSE系统上没装起来。查阅了些资料,看到过如下两种方式安装成功的。大家可以在自己的环境试试。

1、使用zypper安装

Linux:~ #zypper install shellcheck


2、use OneClickInstall - https://software.opensuse.org/package/ShellCheck

参考链接:

shellcheck官网:https://www.shellcheck.net/

shellcheck github:https://github.com/koalaman/shellcheck
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: