我试图使用shell脚本每4秒从oracle数据库中显示一个结果集。这是我到目前为止,但它给了我oracle版本信息和未格式化的结果:
#!/bin/bash
RETVAL=`sqlplus "username/password@(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 :(得分: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 :(得分:-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