我希望能够始终执行validateA和validateB:
function validateA() {
echo "A [ok]"
return 0
}
function validateB() {
echo "B [ok]"
return 0
}
if ! validateA | ! validateB; then
echo "validation [fail]"
exit 1
else
echo "validation [ok]"
exit 0
fi
答案 0 :(得分:4)
您可以随意调用它们并捕获返回值:
function validateA() {
echo "A [fail]"
return 1
}
function validateB() {
echo "B [ok]"
return 0
}
validateA ; vA=$?
validateB ; vB=$?
if [[ $vA -ne 0 || $vB -ne 0 ]] ; then
echo "validation [fail]"
exit 1
else
echo "validation [ok]"
exit 0
fi
输出:
A [fail]
B [ok]
validation [fail]
答案 1 :(得分:2)
我有同样的问题,最后做了类似的事情:
rc=0
if ! validateA ; then rc=1; fi
if ! validateB ; then rc=1; fi
return $rc
它与其他答案的原理相同,但语法更为浓缩。
答案 2 :(得分:1)
我想到的第一个想法就是一致地调用每个函数,保存返回值并在以后进行分析。像这样:
validateA
a_retval=$?
validateB
b_retval=$?
if [ $a_retval -ne 0 -o $b_retval -ne 0 ]; then
echo "validation [fail]"
exit 1
else
echo "validation [ok]"
exit 0
fi