2014-12-02 93 views
0

我試圖執行一個在Oracle產品中調用作業的ksh腳本。當我運行/執行我的劇本,我得到以下錯誤:文件意外結束 - ksh

$ sh test.sh 
: command not found 
: command not found 
: command not found 
: command not found 
test.sh: line 31: syntax error: unexpected end of file 
$ 

這裏是我的代碼 - 請告訴我什麼,我做錯了:

#!/usr/bin/ksh 
# 
# OEDQJobSubmit.sh 

export BatchKey="AVG" 

# Environment details: CURRENT 

export OEDQUser=user1 
export OEDQPass=password 
export OEDQPORT=8090 
export OEDQHOST=`hostname` 

if [ ${BatchKey} = "AVG" ]; then 
    export Job="Job-Averages" 
    export Project="IPVFB-AVG" 
fi 

cd /ora/mw_etl/Oracle_EDQ1/oracle.edq/ 
/ora/java/sunjdk/bin/java -jar jmxtools.jar runjob -job "${Job}" -project "${Project}" -u ${OEDQUser} -p ${OEDQPass} ${OEDQHOST}:${OEDQPORT} 

export ReturnCode=${?} 

if [ ${ReturnCode} == 0 ]; then 
    exit 0 
else 
    exit 1 
fi 

謝謝!

+0

你爲什麼要把所有的變量放在環境中?你可以在你的腳本中刪除每個出現'export'的單詞,並且你應該理解這樣做的含義。 – 2014-12-02 17:40:00

+0

此外,最後6行(分配ReturnCode,然後使用它來指定參數退出)完全是多餘的。該腳本將以執行的最後一個命令的返回值退出。 (如果你真的關心將所有非零值映射到1,只要'test $?= 0',但你可能實際上並不關心這個。) – 2014-12-02 17:41:56

+0

那麼,第一個if語句沒有完成,這個腳本將觸發所有工作,我正在嘗試測試它,看看它是否適用於此刻。另外我的BatchKey目前是硬編碼的。這將被刪除,並且在運行此腳本時,會傳遞一個參數。 – AJR 2014-12-02 17:54:44

回答

1

你是做了一個錯誤,要調用ksh腳本sh =)

2解決方案:

  • chmod +x test.sh; ./test.sh

  • ksh test.sh
+0

如果我使用的ksh test.sh我得到以下幾點: $ KSH test.sh :找不到[沒有這樣的文件或目錄] :找不到[沒有這樣的文件或目錄] :找不到[沒有這樣的文件或目錄] :找不到[沒有這樣的文件或目錄] test.sh:第14行:語法錯誤第31行:'如果'不匹配 – AJR 2014-12-02 17:40:42

+0

如果我使用chmod + x test.sh; ./test.sh .....我得到以下內容: $ chmod + x test.sh; ./test.sh -ksh:./test.sh:找不到[沒有這樣的文件或目錄] – AJR 2014-12-02 17:43:58

+0

所以它看起來像複製和過去不起作用。我基本上在Linux服務器上的vi編輯器中重寫了我的整個程序,並使用ksh test.sh運行它。有用。多謝你們。 我之前做過的事情是在Notepad ++中編寫程序,並將其複製到Linux。請注意,不要這樣做 – AJR 2014-12-02 20:03:29

1

您的文件包含回車符。

通過dos2unixtr -d '\r'運行腳本。