问题描述
有什么方法可以检查执行命令时是否有错误?
示例:
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!
不会回应成功,因为命令在&& ;.之前中断。其推论是||,其中cd /nonexistant || echo fail
将因为cd失败而回应失败。 (如果使用像|| exit这样的东西,这会变得很有用,如果前面的命令失败,它将结束脚本。)
第五种办法
command && echo $? || echo $?