expr,eval或test来检查返回值

时间:2011-10-03 18:02:52

标签: bash

我有一个简单的数据库查询,我将其包装在我的bash脚本中。

如果我的查询检索了一行,我想做几件事。如果我的查询检索零行,我想优雅地终止我的脚本。

检查我的脚本是否检索零行的最佳方法是什么?你能提供一些指示吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

这是一个工作bash脚本,用于从DB获取行数。只需传递变量并用你的部分替换部分sql。

#!/bin/bash
NUMROWS=`$ORACLE_HOME/bin/sqlplus -s $DBUSER/$DBPASSWORDd@//$DBHOST:$DBPORT/$ORACLE_SID   << EOF
WHENEVER SQLERROR EXIT FAILURE ROLLBACK
SET HEADING OFF
SET FEEDBACK OFF
SET PAGES 0
select count(*) from dual;
exit success
EOF`
echo $NUMROWS

提示: 将最后一行echo $ NUMROWS替换为退出$ NUMROWS,如果没有记录,您的脚本将正常退出。如果你想做其他事情,请用bash if语句包装它,如下所示。

if [ $NUMROWS -lt 1 ]; then
  #exit gracefully
  exit 0; 
fi

# do something

答案 1 :(得分:0)

让我们调用命令do_it。然后,想到的最简单的事情是:

do_it | while read x; do 
    # do whatever you want ...
done

在这种情况下,如果没有结果,则不会运行该块

答案 2 :(得分:0)

我明白了:诀窍是使用/ dev / null。

#!/bin/bash
DB2INSTANCE=db2inst1
BIN="/users/db2inst1/sqllib/bin"
OUT=`${BIN}/db2 connect to myschema > /dev/null 
${BIN}/db2 -x "SELECT CURRENT_DATE FROM SYSIBM.SYSDUMMY1 WITH UR"
${BIN}/db2 quit > /dev/null
`
echo $OUT

希望这有帮助。