【问题标题】:How to get output status of sqlplus command from shell/shell script?如何从 shell/shell 脚本获取 sqlplus 命令的输出状态?
【发布时间】:2014-03-21 17:02:15
【问题描述】:

我想从 shell 脚本运行 sqlplus 命令并从 shell 脚本检查 sqlplus 命令的状态(即成功或失败,即在 bash 中它是 $? )。你能给我一些提示吗?

例如以下脚本可以工作,但我对一个 shell 脚本感兴趣,它会告诉我架构/帐户是否具有“更改数据库链接”权限(即 shell 脚本如何解释 sqlplus 的输出并告诉我是否是成功还是失败)-

#!/bin/bash

schema=$1
password=$2
database=$3

echo "schema is $schema"
echo "password is $password"
echo "database is $database"

sqlplus -s "$schema/$password@$database" <<ENDOFSQL
SET SPACE 0
SET LINESIZE 80
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF
select privilege from session_privs where PRIVILEGE = 'ALTER DATABASE LINK';
exit;
ENDOFSQL
##### END OF SCRIPT

提前致谢。 -Shashi Divekar

【问题讨论】:

    标签: mysql sql bash shell sqlplus


    【解决方案1】:

    您在问题中要求两件不同的事情。首先,您询问检查“输出状态”,然后询问“解释 [ing] 输出”,这是不同的。这是您关于输出状态的第一个问题的答案,即退出代码:

    ...
    exit;
    ENDOFSQL
    
    if [ $? -ne 0 ]; then
        echo "whoops"
    else
        echo "all good"
    fi
    ##### END OF SCRIPT
    

    请参阅the docs 了解更多信息。

    【讨论】:

    • 感谢 dg99。我正在寻找“sqlplus”命令的退出代码。即,如果架构/帐户具有“ALTER DATABASE LINK”权限,那么我想打印“OK”之类的内容,否则打印“Not OK”。只需检查“$?”在这种特殊情况下无济于事。
    【解决方案2】:

    当您在 session_privs 表中查询权限列时,您可以期待如下几行的输出:

    PRIVILEGE
    -----------------------
    CREATE VIEW
    DEBUG CONNECT SESSION
    CREATE SESSION
    ALTER SESSION
    ...
    

    而且我知道您已尝试从查询输出中删除所有无关的内容,但无论如何您都必须检查它。这是因为sqlplus退出状态只是关于运行查询的成功或失败,而不是查询的输出,所以你为什么不简单地grep你要查找的权限呢?

    ...
    SQLPLUS_OUTPUT=$(sqlplus -s "$schema/$password@$database" <<ENDOFSQL
    select privilege from session_privs;
    exit;
    ENDOFSQL
    ) || { echo "Failed to run query"; exit 1; }
    
    if [ -n "$(printf '%s\n' $SQLPLUS_OUTPUT | grep 'ALTER DATABASE LINK')" ]; then
        echo "Privilege located!"
    else
        echo "Privilege NOT located."
    fi
    ...
    

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      相关资源
      最近更新 更多