对Bash脚本进行故障排除

审核二进制符合性放大镜调查
stevanovicigo /盖蒂

如果您遇到建筑物,测试或运行复杂的Bash脚本,请不要丢失心脏。您有很多方法可以帮助确保您的脚本完美无瑕。在这篇文章中,我们将研究某种方式,您可以减少错误的可能性以及如何执行一些简单但非常有效的故障排除。

通过对可能的问题进行测试并进行故障排除以帮助检测错误的健壮逻辑的组合,您的脚本可能会非常快地为showtime做好准备。

首先建造外边缘

避免脚本中的语法错误的一种方法是使用外部逻辑启动您的循环,循环,案例语句和if /然后命令。如果您使用句法“骨架”启动脚本逻辑,则不会忘记正确结束。

一世列表尽管 [状况]案例“1美元”如果[状况];然后做str1.cmd;;CMDS.CMDS.CMDS.*)cmd;;别的
完成完成esacCMDS.
fi

在将基本命令框架到位后返回并填写详细信息。

验证脚本参数

为了帮助确保脚本无法进入运行时问题,请确保它检查正在提供正确数量的参数,并且提供的任何文件作为参数实际存在。以下是实现这些检查的一些示例。

检查参数的#

如果[$# -lt 2];然后echo " use: $0 lines filename" exit else numlines=$1 filename=$2 fi .

请注意,如果参数不匹配预期的内容,则生成使用语句,然后退出脚本。

检查参数的类型

如果[$ numlines!= [0-9] *]];然后回显“错误:$ numlines不是数字”退出fi

检查文件是否存在

如果 [ !-f $ filename];然后回显“错误:找不到文件$ filename”退出fi

打开Bash调试

另一种测试脚本的方法是打开调试。这将帮助您验证它们是否正常工作,或查明脚本中可能导致问题的任何行。您可以通过使用来打开通常称为“调试模式”的模式- x作为bash的争论。它可以通过在执行脚本中显示每个行来帮助调试。这允许您查看哪些命令按预期工作,哪些命令不是。

您可以使用- x用两种方式之一。您可以像这样启动脚本:

$ bash -x myscript

或者你可以插入- x进入脚本顶部的“谢信线”:

#!/ bin / bash -x

- xShebang线路中的选项意味着您不必键入“bash-x scriptname”。只需记住,一旦您的调试完成,就会删除“-X”。

您也可以选择仅在脚本的一部分打开调试。为此,请在脚本的脚本部分之前添加“SET -X”,然后在该部分后关闭“设置+ X”。

set -x虽然[$ i -Le 2]做回声编号:$ i((i ++))完成set + x

- vBash选项类似地工作- x,但它在读取脚本中显示每行。这意味着您将看到整个脚本,然后在运行时的输出。您也可以使用十五当你bash参数(即bash -xv)。

下面是一个使用bash的示例- x旨在显示文件顶行的脚本的调试形式:

$ bash -x showtop ++日期+%s + startime = 1622138266 ++  -  1622138266 Showtop:第4行: - :找不到命令<===哎呀!+ echo 'It takes seconds to complete this task…'完成这个任务只需要几秒钟…+ '[' 0 -lt 2 ']' + echo '使用:showtop lines filename

下面输出的第4行表明有一个问题。由于某些原因,该脚本正在寻找一个名为“-”的命令。不久之后,我们看到一个用法语句,表明参数有问题,而上面的行表明没有提供任何参数。在这种情况下,出现第一个错误是因为$ENDTIME在脚本的那个点没有值,使$ENDTIME等于一个空字符串,因此第二行上的计算结果只是“- 1622138266”,显然是无效的。

#!/bin/bash STARTTIME=$(date +%s) timing= ' expr $ENDTIME - $STARTTIME ' echo "It takes $timing seconds to complete this task"

该定时计算属于使用Date命令收集结束时间值后的脚本底部,如此已更正版本:

#!/ bin / bash starttime = $(日期+%s)如果[$#-lt 2];然后回显“使用率:$ 0行文件名”退出else numlines = $ 1 filename = $ 2 fi如果[$ numlines!= [0-9] *]];然后回显“错误:$ numlines不是数字”退出fi,如果[!-f $ filename];然后回声“错误:未找到文件$ filename”退出else echo文件头 -  $ numlines $ filename fi Endtime = $(日期+%s)计时=`expr $ neptime  -  $ starttime` echo“它需要$时刻秒完成此任务“

下面是在调试模式下运行修复脚本的示例。一些底线(以粗体显示)是预期的脚本输出。另一条线是调试输出。

$ bash -x showtop 10 oldScript ++ date +%s + STARTTIME=1622143586 + '[' 2 -lt 2 ']' + numlines=3 + filename=oldScript + [[3 != [0-9]*]] + '[' '!` -f oldScript `] ` + echo top of file top of file + head -3=10 oldScript#!/bin/bash STARTTIME=$(date +%s) echo "It takes $($ENDTIME - $STARTTIME) seconds to complete this task…" if [$# -lt 2];然后echo "用法:$0 lines filename" exit else numlines=$1++日期+%s + eMptime = 1622143586 ++ expr 1622143586  -  1622143586 +时间= 0 +回声'完成此任务需要0秒...'完成此任务需要0秒钟...

包起来

具有脚本验证参数并使用- x找出缺陷的调试选项在让脚本准备使用时非常方便,特别是对于那些比本文中使用的示例更长更复杂的脚本。

加入网络世界社区足球竞猜app软件Facebooklinkedin.评论是最重要的主题。
有关的:

版权所有©2021.足球竞彩网下载

2021年IT薪资调查:结果是