变量比较

时间:2018-08-23 11:02:57

标签: bash variables

我想用几个命令编写一个脚本并获得所有命令的组合结果:

#!/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

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为您只是在寻找这个东西

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

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

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

答案 1 :(得分:1)

所以考虑一下...

我们要在成功返回0…或如果其中一个命令发生错误,则返回其他正整数。

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

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

您还可以使用逻辑!替换第一行(or),如上所述。

RET=$[RET_CMD1 | RET_CMD2 | RET_CMD3]

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

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