如何在shell脚本中提取sybase sql查询输出

时间:2014-12-04 11:16:55

标签: shell isql

我正在尝试使用shell脚本在SYBASE数据库上执行SQL查询 一个简单的查询来计算表中的行数。

#!/bin/sh

[ -f /etc/bash.bashrc.local ] && . /etc/bash.bashrc.local
. /gi/base_environ
. /usr/gi/bin/environ
. /usr/gi/bin/path

ISQL="isql <username> guest"    

count() {
VAL=$( ${ISQL} <<EOSQL
set nocount on
go
set chained off
go
select count(*) from table_name
go
EOSQL
)
echo "VAL : $VAL"
echo $VAL | while read line
do
 echo "line : $line"
done
}

count

上面的代码给出了如下输出

VAL : Password:
-----------
      35
line : Password: ----------- 35

有没有办法只获得价值'35'。我在这里缺少什么?提前谢谢。

1 个答案:

答案 0 :(得分:1)

&#34;选择计数(*)&#34;将结果集打印为输出,即列标题(此处为空白),每列的短划线以及每行的列值。这里只有1列和1行。 如果你想摆脱破折号,你可以做各种事情:

  • 将count(*)选择为变量,然后只打印变量。这将删除输出中的破折号
  • 在使用之前对$ VAL变量执行一些额外的过滤,例如grep和awk

至于密码:&#39; line:你没有在&#39; isql&#39;中指定密码。命令,所以&#39; isql&#39;将提示它(因为它工作,看起来没有密码)。最好指定一个密码标志以避免此提示 - 或者如上所述过滤掉该部分。 顺便说一句,看起来你可能正在使用&#39; isql&#39;来自Unix / Linux ODBC安装,而不是&#39; isql&#39; Sybase附带的实用程序。最好使用后者(请查看&#39; isql&#39;)。