2016-12-14 4 views
-1

シェルスクリプトを使用して4秒ごとにoracleデータベースから結果セットを表示しようとしています。これは私がこれまで持っているものですが、それは私のOracleのバージョン情報とunformated結果を与える:シェルスクリプトを使用して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

をthat-するのにより適しているクエリがローを返した場合、あなただけのテストするスペースの後にあるものを取ることができます。 メイクコード:

$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)'ではなく 'for'でなければなりません。 – Kacper

+0

こんにちはanonymous downvoter。説明するケア? – VM17

関連する問題