如何逐个运行查询并仅返回bash脚本中的退出代码?

时间:2015-05-20 04:00:13

标签: linux bash

我创建了以下脚本: -

query1=$(command1)
query2=$(command2)
query3=$(command3)

if [ $? -eq 0]
then
    echo "Success"
    exit 0
else
    echo "Failed"
    exit
fi

问题是当我运行脚本时,它会执行查询(全3查询)并只返回第3个查询的结果

如何在不显示查询输出的情况下逐个运行查询,只显示退出代码并转到下一个查询?

希望足够清楚,我是Linux脚本的新手。

2 个答案:

答案 0 :(得分:0)

  

如何在不显示查询输出的情况下逐个运行查询,   只是退出代码并转到下一个查询?

要一次运行一个命令,处理它们的标准输出,但显示每个命令的退出代码:

command1 >/dev/null; echo "command1 code=$?"
command2 >/dev/null; echo "command2 code=$?"
command3 >/dev/null; echo "command3 code=$?"

使用if命令

if command1 >/dev/null
then
    echo Success
else
    echo Fail
fi

答案 1 :(得分:0)

一个问题:如果{,1}}失败了,你是否想要执行command2,或者你想立即失败?

如果你想要执行所有命令,你必须在每个命令后存储返回代码,如下所示:

command3

然后你必须测试所有这些,例如:

query1=$(command1)
RC1=$?
query2=$(command2)
RC2=$?
query3=$(command3)
RC3=$?

如果您不想使用退货代码,您也可以在其中一个发生故障时进行存储:

if [[ "$RC1" != "0" || "$RC2" != "0" || "$RC3" != "0" ]]; then
    echo "Fail"
    exit 1
else
    echo "Success"
    exit 0
fi

但是如果你只需要执行直到第一个失败,事情会变得更容易:

FAIL=""
query1=$(command1) || FAIL="yes"
query2=$(command2) || FAIL="yes"
query3=$(command3) || FAIL="yes"

if [[ -z $FAIL ]]; then
    echo "Success"
    exit 0
else
    echo "Fail"
    exit 1
fi

或者,更简单:

#!/usr/bin/env bash

while true; do
    query1=$(command1) || break
    query2=$(command2) || break
    query3=$(command3) || break
    echo "Success"
    exit 0
done

echo "Fail"
exit 1