0

我正在尝试使用 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'。我在这里缺少什么?提前致谢。

4

1 回答 1

1

“select count(*)”将结果集打印为输出,即列标题(此处为空白)、每列的一行破折号以及每行的列值。在这里,您只有 1 列和 1 行。如果你想摆脱破折号,你可以做各种各样的事情:

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

至于'Password:'行:你没有在'isql'命令中指定密码,所以'isql'会提示输入(因为它有效,看起来好像没有密码)。最好指定一个密码标志以避免此提示 - 或如上所述过滤掉该部分。顺便说一句,您可能正在使用 Unix/Linux ODBC 安装中的“isql”,而不是 Sybase 附带的“isql”实用程序。最好使用后者(检查'which isql')。

于 2014-12-05T12:25:13.657 回答