变量比较



我想编写一个包含多个命令的脚本,并获得所有命令的组合结果:

#!/bin/bash
command1; RET_CMD1=$(echo $?)
command2; RET_CMD2=$(echo $?)
command3; RET_CMD3=$(echo $?)
#result is error if any of them fails
#could I do something like:
RET=RET_CMD1 && RET_CMD2 && RET_CMD3 *<- this is the part that I can't remember how I did in the past..*
echo $RET

感谢您的帮助!

我想你只是在寻找这个:

if ! { command1 && command2 && command3; }; then
echo "one of the commands failed"
fi

仅当所有命令都成功退出时,块{ command1 && command2 && command3; }的结果才会0(成功(。如果块全部写在一行上,则需要分号。

无需将返回代码保存到变量中,甚至无需引用$?,因为if基于命令(或命令列表(的返回代码工作。

所以想想这个...

我们希望在成功后返回0...或某个其他正整数(如果其中一个命令发生错误(。

如果任何 3 个都没有发生错误,它们都将返回0,这意味着您还将在脚本中返回0。一些简单的添加可以解决此问题。

RET=$[RET_CMD1 + RET_CMD2 + RET_CMD3]   # !
echo $RET

如前所述,您还可以将第一行 (!( 替换为逻辑or运算符。

RET=$[RET_CMD1 | RET_CMD2 | RET_CMD3]

请注意,加法和逻辑or本质上是不同的。但是您似乎想要合乎逻辑or...

此设置的缺点:无法从返回值跟踪错误发生的位置。从任一 3 个命令跟踪错误将需要依赖于生成的其他错误输出。(这只是一个预警。

最新更新