我在編寫bash腳本時遇到了問題。從bash腳本中獲取sqlplus提示輸出
我想從sqlplus提示輸出到bash變量。我嘗試了許多論壇中建議的方法。
t=$(./bin/sqlplus 'oracleuser/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))' << END
SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;
exit;
END
)
echo $t
這就是我想要做的。在上面,我正在生成字符串
'oracleuser/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))'
動態。這部分工作正常,問題來了,當我通過命令
SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;
在sqlplus提示。這裏發生的事情就是,$符號正在越獄,但是當*命令作爲一個整體運行時,*符號會導致問題(如在sqlprompt中列出它運行的目錄中的所有文件!)。
我已經編寫這樣的: -
connect="'oracleuser/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.1.2)(Port=1521))(CONNECT_DATA=(SID=connectstring)))'"
arr[1]="SELECT (1 - (Sum(getmisses)/(Sum(gets) + Sum(getmisses)))) * 100 FROM V\$rowcache;"
exp=$(./bin/sqlplus $mconnect << END
printf "${arr[1]}";
exit;
END
)
echo $exp
運行腳本時,它成功地進入到在sqlplus,但運行SELECT命令時,*引起的問題,但是,如果我進入命令手動它的工作原理。
有沒有更好的方法存在?我不是一個bash怪胎:(。
我需要一些實實在在的幫助!
感謝您抽出時間來看看我的問題。
最好的問候, Bhuvanesh
您好,感謝您的答覆。這種方法可行,但我試圖實現一個腳本文件,其中參數被修改並且查詢被傳遞給sql會話。因此,對於查詢,我會將它作爲數組元素或值添加到變量中,以便在從同一腳本啓動sqlplus會話時調用它。 –