我需要在脚本中依赖几个单独的执行,并且不希望将它们全部捆绑在一个丑陋的’if’语句中.我想把退出代码’$?’每次执行并添加它;最后,如果这个值超过一个阈值 – 我想执行一个命令.
伪代码:
ALLOWEDERROR=5 run_something RESULT=$? ..other things.. run_something_else RESULT=$RESULT + $? if [ $RESULT -gt ALLOWEDERROR ] then echo "Too many errors" fi
问题:即使互联网声称不然,bash拒绝对待RESULT和$?作为整数.什么是正确的语法?
谢谢.
你可能想看看内置的陷阱,看它是否有用:
help trap
要么
man bash
你可以为这样的错误设置一个陷阱:
#!/bin/bash AllowedError=5 SomeErrorHandler () { (( errcount++ )) # or (( errcount += $? )) if (( errcount > $AllowedError )) then echo "Too many errors" exit $errcount fi } trap SomeErrorHandler ERR for i in {1..6} do false echo "Reached $i" # "Reached 6" is never printed done echo "completed" # this is never printed
如果你计算错误(并且只有当它们是错误时),而不是使用“$?”,那么你不必担心返回值不是零或一.例如,单个返回值127会立即超过您的阈值.除了ERR之外,您还可以为其他信号注册陷阱.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。