当前位置: 首页>>技术教程>>正文


如何检查命令是否成功?

,

问题描述

有什么方法可以检查执行命令时是否有错误?

示例:

test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1

function valid () {
  if $test -eq 1; then
    echo "OK"
    else echo "ERROR" 
  fi
}

我已经尝试过,但它似乎不工作。我不怎么做。

最佳解决办法

返回值存储在$?中。 0表示成功,其他表示错误。

some_command
if [ $? -eq 0 ]; then
    echo OK
else
    echo FAIL
fi

像任何其他文本值一样,您可以将其存储在变量中以供将来比较:

some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
    echo "Return code was not zero but $retval"
fi

有关可能的比较运算符,请参阅man test

次佳解决办法

如果您只需要知道命令是成功还是失败,请不要打扰测试$?,只需直接测试命令即可。例如。:

if some_command; then
    printf 'some_command succeeded\n'
else
    printf 'some_command failed\n'
fi

将输出分配给一个变量不会改变返回值(当然,除非stdout当然不是终端时它的行为不同)。

if output=$(some_command); then
    printf 'some_command succeded, the output was «%s»\n' "$output"
fi

http://mywiki.wooledge.org/BashGuide/TestsAndConditionals更详细地解释了if

第三种解决办法

command && echo OK || echo Failed

第四种办法

$?应该包含前一个命令的退出状态,该状态在没有错误的情况下应该为零。

所以,就像;

cd /nonexistant
if [ $? -ne 0 ]
then
    echo failed
else
    echo success!
fi

在大多数情况下,使用&&构建连锁需要相互依赖的命令。所以cd /nonexistant && echo success!不会回应成功,因为命令在&&amp ;.之前中断。其推论是||,其中cd /nonexistant || echo fail将因为cd失败而回应失败。 (如果使用像|| exit这样的东西,这会变得很有用,如果前面的命令失败,它将结束脚本。)

第五种办法

command && echo $? || echo $?

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/412.html,未经允许,请勿转载。