我需要针对三个变量运行测试。如果所有三个变量都设置为预期值,则测试将通过。如果只有两个或一个则测试将失败。这个想法是,如果任何失败,那么将报告。我怎样才能最有效地做到这一点?
目前,我只能将其设置为if ... elif块的大量字符串。
if [[ test1 ]] && [[ test2 ]] && [[ test3 ]]
then
# repeat until all combinations of true and false results are exhausted.
如果不创建八个不同的if...elif
测试,您将如何测试所有组合?
test1 && test2 && test3
test1 && !test2 && test3
test1 && test2 && !test3
test1 && !test2 && !test3
!test1 && test2 && test3
!test1 && !test2 && test3
!test1 && test2 && !test3
!test1 && !test2 && !test3
答案 0 :(得分:2)
也许这可以像单独检查三个变量一样简单吗?
pass=1
[[ test1 ]] || { echo 'test1 failed'; pass=0 }
[[ test2 ]] || { echo 'test2 failed'; pass=0 }
[[ test3 ]] || { echo 'test3 failed'; pass=0 }
[[ $pass -eq 0 ]] && echo 'one of the tests failed'
答案 1 :(得分:1)
您可以计算失败的测试次数。 Bash有几种方法可以进行整数运算。
score=0
if ! [[ test1 ]]; then score=$((score + 1)); fi
if ! [[ test2 ]]; then score=$((score + 1)); fi
if ! [[ test3 ]]; then score=$((score + 1)); fi
if [ $score != 0 ]; then echo $score tests failed; fi
答案 2 :(得分:0)
如果您的测试是独立的并且都希望在所有情况下都进行测试,那么最简单的方法就是测试它们并跟踪它们是否有任何失败。
这样的事情:
if ! [[ test1 ]]; then
echo 'Report test1 failure.'
failed=1
fi
if ! [[ test2 ]]; then
echo 'Report test2 failure.'
failed=1
fi
if ! [[ test3 ]]; then
echo 'Report test3 failure.'
failed=1
fi
if [[ "$failed" = 1 ]]; then
exit 1
fi
答案 3 :(得分:0)
if ! ( test1 && test2 && test3 ) ; then
echo "fail"
exit 1
else echo "success"
fi