调试 – bash脚本:从一个语句块中捕获错误
发布时间:2020-12-15 20:55:30 所属栏目:安全 来源:网络整理
导读:我有一个大的iptables规则集,我用自己的bash脚本管理.脚本中的大多数命令都是简单的单一语句iptables命令.我试图通过在脚本执行时添加成功/失败输出来改进脚本. 我将脚本分成不同的部分.一个例子是FORWARD链部分,其中所有规则都应用于FORWARD链.在本节的开头
我有一个大的iptables规则集,我用自己的bash脚本管理.脚本中的大多数命令都是简单的单一语句iptables命令.我试图通过在脚本执行时添加成功/失败输出来改进脚本.
我将脚本分成不同的部分.一个例子是FORWARD链部分,其中所有规则都应用于FORWARD链.在本节的开头,我输出脚本已经开始应用FORWARD规则,最后,我想输出是否所有规则都成功应用,或者是否有任何规则不起作用.这是基本的想法: #Start FORWARD section echo -ne "Applying FORWARD rules..." #rule 1 /sbin/iptables -A FOWRARD... #rule 2 /sbin/iptables -A FORWARD... echo -ne "ttt[OK]n" 我想要做的是捕获每个iptables命令可能导致的任何输出或错误,并将它们存储在数组或其他内容中.然后在块的末尾,使用if语句来评估数组以查看是否存在任何错误.如果没有,输出[OK]状态,如果有,则输出[FAILED]状态并显示相关错误. 有没有办法可以为整个规则块执行此操作,而无需将每个iptables规则包含在if [$? != 0]表达? 解决方法
那么set -e选项(第一次失败时退出)或者:
#rule 1 /sbin/iptables -A FORWARD ... && #rule 2 /sbin/iptables -A FORWARD ... && echo "[OK]" 假设每个命令都识别错误,除非一切正常,否则您将看不到OK. 如果您必须处理具有非零但成功的退出状态的顽固流程,那么您将此类命令嵌入到处理该问题的子shell中: #rule 1 /sbin/iptables -A FORWARD ... && #rule 2 /sbin/iptables -A FORWARD ... && # Unusual process - finagle-it returns status 17 on success ( /usr/local/sbin/finagle-it ... if [ $? = 17 ]; then exit 0; else exit 1; fi ) && echo "[OK]" 请注意,在运行finagle-it时,必须取消set -e – 在子shell中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 如何在AngularJs中设置全局http超时
- webservice的axis2客户端调用方式和xfire调用方式
- 在角度2/4中更改属性时创建过渡
- Angular4_bootstrap模态框打开关闭,点击背景事件
- twitter-bootstrap – Legacy CSS与Bootstrap冲突
- bash – 同步保存stdout,stderr和stdout stderr
- Docker结合网络和“内部”属性示例
- scala – 在Option.isEmpty和Option.get上使用Op
- Bash shell脚本在通过stdin传递给LXC容器时不按顺
- 如何在scala中实现Serializable接口?
热点阅读