2014-12-04 97 views
0

我試圖在使用shell腳本的SYBASE數據庫上執行SQL查詢。
一個簡單的查詢來計算表中的行數。如何在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

「select count(*)」輸出結果集作爲輸出,即列標題(這裏是空白),每行的破折線和每行的列值。在這裏你只有1列和1行。 如果你想擺脫短線的,你可以做各種事情:

  • 選擇COUNT(*)爲變量,只打印變量。這將從輸出中刪除破折號
  • 執行的東西,如grep和awk在$ VAL變量一些額外的濾波使用它

至於之前「密碼:」行:你是不是指定密碼在'isql'命令中,'isql'會提示它(因爲它工作,看起來好像沒有密碼)。最好指定一個密碼標誌以避免此提示 - 或者按上述過濾掉該部分。 順便提一下,看起來您可能正在使用來自Unix/Linux ODBC安裝的'isql',而不是Sybase隨附的'isql'實用程序。最好使用後者(查看'哪個isql')。

+0

是否沒有其他方式來處理列標題和破折號不會顯示。正如你所說,我正在與$ VAL的額外過濾。 if [-z「$ VAL」];然後 echo「數據庫沒有返回行」 return 1 else echo $ VAL | while read line do queryRes =($ line) echo $ {queryRes [2]} done fi return#? – deep 2014-12-16 10:10:58