2016-12-14 46 views
-1

我正在尝试使用shell脚本每4秒从oracle数据库显示结果集。这是我到目前为止,但它给我的Oracle版本信息和未格式化的结果:每4秒钟使用shell脚本显示结果集每4秒

#!/bin/bash 
RETVAL=`sqlplus "username/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=HOSTNAME)(Port=1521))(CONNECT_DATA=(SID=SIDNAME)))" <<EOF 
SET PAGESIZE 200 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
select user_id,user_work_class,sol_id,user_appl_name from upr where user_logged_on_flg = 'Y'; 
EXIT; 
EOF` 
if [ -z "$RETVAL" ]; then 
    echo "No rows returned from database" 
    exit 0 
else 
    echo $RETVAL 
fi 

任何意见或方向将得到高度赞赏。

+0

是关于“每4秒”部分还是脚本本身的问题? – VM17

+0

显示器也是扭曲的。 – ErrorNotFoundException

+0

请将问题分为2个问题,并删除所有与您相关但与他人无关的内容。 –

回答

1

如果查询返回的行,你只能采取什么是空间后进行测试。 使代码:

$RETVAL_TST= `echo $RETVAL | awk '{print $2}'` 

if [ -z "$RETVAL_TST" ]; then 
    echo "No rows returned from database" 
    exit 0 
else 
    echo $RETVAL 
fi 

但你测试AWK '{print $2}'必须是一个关键,而不是空列。

-1

要每4秒运行脚本,您需要设置一个与sleep的循环。 如果脚本被称为script.sh

for i in {1..100} ; do sh script.sh ; sleep 4 ; done > output 

将运行脚本的每次运行之间4秒间隔100次,而输出保存到称为output文件。

编辑 -

如果您希望脚本无限期地运行下去,则for循环不是一个好主意。正如@Kacper提到的,while循环更适合觉得─

while(true) ; do sh script.sh ; sleep 4 ; done > output 
+1

如果它每4秒运行一次,你可能需要'while(true)'not'for' – Kacper

+0

你好匿名downvoter。谨慎解释? – VM17