2016-10-24 135 views
0

我有一個如下所示的腳本。我的目標是寫入日誌文件的當前日期和時間作爲文件名和閥芯文件終止:如何將一個變量傳遞給bash腳本中的sqlplus

#!/bin/bash 

year=`date +%Y` 
month=`date +%m` 
day=`date +%d` 
prefixe=$month$day$year 
logfile="/home/oracle/logs/exec_proc_daily_20_"$prefixe.log 

sqlplus/"as sysdba" <<EOF 
spool on 
spool $logfile 
execute Proc_RFC_MAJ_MV_ITIN; 
execute Proc_RFC_MAJ_MV_REFGEO; 
commit; 
quit 
EOF 

當我執行腳本時,spool $logfile給出了一個錯誤。沒有創建日誌。但是,當我使用類似spool exec_proc_daily_2o.log的東西時,它很有用。爲什麼變量$logfile不能取代。

+0

更換'sqlplus /「as sysdba」'with'cat'並運行你的腳本表明變量替換_is_按預期工作... – Stygies

回答

2

做了很多挖掘之後,我找到了解決問題的辦法。在行sqlplus/"as sysdba" <<EOF,我通過了像這樣的變量sqlplus/as sysdba <<EOF >$logfile。因此,完整的代碼應該是:

#!/bin/bash 

year=`date +%Y` 
month=`date +%m` 
day=`date +%d` 
prefixe=$month$day$year 
logfile="/home/oracle/logs/exec_proc_daily_20_"$prefixe.log 

sqlplus/"as sysdba" <<EOF >$logfile 
spool on 
spool $logfile 
execute Proc_RFC_MAJ_MV_ITIN; 
execute Proc_RFC_MAJ_MV_REFGEO; 
commit; 
quit 
EOF 
+0

您的sqlplus命令將sqlplus的輸出重定向到$日誌文件。 – Beege

0

[編輯與工作示例]傳遞一個變量在sqlplus:

demo.sh

export myvar1="hello" 
export myvar2=123 
sqlplus "/ as sysdba" @demo.sql $myvar1 $myvar2 
echo "---shell is complete---" 

demo.sql

select 'first variable is &1 and second is &2' 
from dual; 
exit 
+0

Hi @Beege。感謝您的輸入。我試過你的方法,但它不起作用。我得到了有關如何使用sqlplus命令的錯誤用法的消息。 –

相關問題