2013-06-28 98 views
0
while IFS=# read -r process_id source destination type 
do 
     echo "Process id: $process_id" 
     echo "Source: $source" 
     echo "Destination: $destination" 
     case "$type" in 
       2) 
       echo "Type is outbound: $type" 
         contact=$(sqlplus -s ${SQLPLUS_INFO} <<EOF 
         SET PAGESIZE 0 
         SELECT email FROM table WHERE partner = '${destination}'; 
         exit 
         EOF 
         ) 
       echo 
       echo ${contact} 
       echo 
       ;; 

大家好,如何將變量傳遞給shell腳本中的查詢?

總部設在上面的代碼中,如何從$目標中的值傳遞給查詢?上面的例子不工作,即使是這些其他的:

SELECT email FROM table WHERE partner = '"${destination}"'; 
SELECT email FROM table WHERE partner = '$destination'; 

任何幫助將是有益的!謝謝!

+1

取出'contact = $('和')'來查看是否是問題的根源。我希望這能夠按原樣運行,但命令替換('$(...)')可能是一個問題。祝你好運。 – shellter

+0

作爲一個單獨的想法,在調用'contact = $(....)'之前添加'export destination'。祝你好運。 – shellter

+0

contact = sqlplus -s $ {SQLPLUS_INFO} << EOF SET PAGESIZE 0 SELECT email FROM table WHERE partner ='$ {destination}'; 退出 EOF 沒有工作,以及,它返回: 行73:語法錯誤:文件意外結束 只是用()沒有工作,以及,返回: 語法錯誤附近意外的標記' <<' 。 。 PS:導出也沒有工作 @shellter,@Emmanuel –

回答

3

當您運行bash -x腳本會發生什麼?我問,因爲這裏的文檔符號期望在行的開頭找到結束標記。當我運行這段代碼:

#!/bin/bash 

    contact=$(cat - <<EOF 
    input from here document 
    second line 
    EOF 
    ) 

echo "$contact" 

我得到這樣的錯誤:

eof.sh: line 3: unexpected EOF while looking for matching `)' 
eof.sh: line 10: syntax error: unexpected end of file 

如果線條與標籤開始,你可以使用破折號檔案結尾標記之前,以表明引出凸片應該被忽略。

#!/bin/bash 

     contact=$(cat - <<-EOF 
     input from here document 
     second line 
     EOF 
     ) 

echo "$contact" 

此輸出:

input from here document 
second line 

替換空白的標籤,你回語法錯誤。雖然我已根據bash來處理這個問題,但我相信你也會遇到與Korn和Bourne shell相同的問題。

所以,我懷疑你的問題與代碼中的here-document格式有關,但你應該看到某種錯誤,所以我有點困惑。你應該得到你想要的進行替換:

#!/bin/bash 

description="The Description" 

     contact=$(cat - <<-EOF 
     input from here document 
     second line with '$description' embedded. 
     EOF 
     ) 

echo "$contact" 

這產生了:

input from here document 
second line with 'The Description' embedded. 

使用bash -x可以幫助追蹤命令的執行。

所有這些只是巧合地與Oracle和SQL * Plus相關。

+0

我想我發現使用bash -x +回聲問題 '目的地:X' 目的地:X +案 「$型」 +回波 '類型是出站:2' 類型是出站:2 + + SQLPLUS -s用戶/通行證@ EDDB +接觸= ' 沒有選擇的行' +回聲 +回聲沒有選擇 任何行的行選擇 +回聲 該查詢返回大量的空間: +回波'Destination:x'<<<<<空格 我設置:上 設定頁面大小0 集COLSEP# 集LINESIZE 1000 集trimspool但看起來沒有工作。 –

0

請嘗試刪除變量周圍的單引號:它們阻止您的變量被解釋(與雙引號相反)。

這應該是:

SELECT email FROM table WHERE partner = ${destination}; 
+0

現在它返回: SELECT email FROM table WHERE partner = X; script.sh result.csv SELECT.sql錯誤在第1行:ORA-00904:「X」:無效標識符 沒有工作,但感謝您的建議。 –

+1

SQL需要將文本值用單引號括起來。 – shellter

相關問題