如何知道bash脚本中的哪一行导致了问题?

时间:2013-10-13 21:31:53

标签: bash shell

例如,我在bash脚本中编写了一堆iptables规则。当我运行脚本时,shell说iptables: No chain/target/match by that name.我不知道发生了什么,所以我将每一行复制并粘贴到shell中并单独运行它们以找出导致问题的行。 BTW。事实证明,我把“OUTUT”而不是“OUTPUT”放在一条规则中。

无论如何,shell可以告诉我[line 53]: iptables: No chain/target/match by that name.,所以我知道问题出在哪里了?

2 个答案:

答案 0 :(得分:0)

我不是bash专家,但我正在做的是添加echo有关进度的信息和read(等到按键),这将让我一步一步地完成这个过程。

答案 1 :(得分:0)

几乎所有程序都会返回成功和错误条件。您可以为脚本调用的每个程序包含错误检查,并对错误采取适当的操作(例如撤消以前的工作,退出等)。如果第3行失败,第4行永远不会执行,这一点特别有用。

您刚刚调用的程序的退出状态存储在$?中。

示例(伪代码 - 您需要修改语法才能正确)

 Iptables foo bar baz; if ($? != 0) echo 'failed to update iptables' && exit 1; fi

另外,您可以使用set -f,set -v和set -x打开各种级别的跟踪。有关详细信息,请参阅以下链接。

http://tldp.org/LDP/abs/html/exit-status.html http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html