我必须通过连接到 oracle 数据库来在脚本中执行操作。我试图在 shell 脚本中使用 expdp 命令来转储数据。
Vi ban.sh
expdp hr/oracle@oracle table=man directory =ban dumpfile=man.dmp
If [ $# -eq 0 ];then
echo 'fail'
fi
If [ $# -eq 1 ];then
echo 'pass'
fi
在上面的脚本中,如果表名给出错误,那么 oracle expdp 会失败,脚本中的状态检查块会通过“pass”块,但不会通过失败块。我该如何处理这种情况?
答案1
如果满足以下条件,实用expdp
程序将以零退出状态退出:
导出或导入作业已成功完成。如果有错误,则不会将错误显示到输出设备或记录在日志文件中。 [参考:数据泵退出代码]。
否则它将具有非零退出状态。这是 Unix 上实用程序的标准。零意味着“成功”,它也是布尔测试中的“真”值。
因此,在您的脚本中,您应该能够说
if expdp ...other options...; then
echo 'Success'
else
echo 'Failure'
fi
这意味着您在代码中进行了向后的测试。
如果你想实际显示退出代码:
expdp ...other options...
code=$?
echo "Exit code is $code"
if [ "$code" -eq 0 ]; then
echo 'Success'
else
echo 'Failure'
fi
由于echo
会发生变化$?
,因此您需要在使用后立即将其值保存到新变量中expdp
。