2015-11-13 77 views
-2

我有3個shell腳本意外的文件結尾時,我執行我的shell腳本

script1.sh

if [ $# -ne 3 ] 
then 
    # RETURN INVALID USAGE 
    GetBatchCredentials_Result="Error" 
    GetBatchCredentials_Reason="Invalid usage: . $0 ApplicationId Alias Logfile" 
else 
    # CONTINUE PROCESSING WITH PARAMETERSLT 
    RSLT=`/www/inf/xxxx/inf_service_account/2.0/scripts/script2.sh $1 $2 $3` 
    eval "$RSLT"; 
fi 

script2.sh

# SET UP INFRASTRUCTURE CLASSPATH 
. /www/inf/xxxx/inf_service_account/2.0/scripts/script3.sh 
PROP="-Dcom.xxxx.env.location.pdc=ITC" 
# CALL JAVA GetBatchCredentials TO RETRIEVE THE SERVICE ACCOUNT CREDENTIALS 
$JAVA_HOME/bin/java $PROP com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3 

script3.sh

#!/bin/ksh 

CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/inf-service-account-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf_crypto.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf_generics.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf_password_vault.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf-jmx-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf-utils-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf-env-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf-recovery-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf-throttle-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/inf-trans-2.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/javaee-api-6.0.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/db2jcc.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/db2jcc_license_cu.jar 
CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_service_account/2.0/dependencies/db2java.zip 

export CLASSPATH 

我的領導要我把所有這3個腳本合爲一體,因爲在這裏有3個獨立的腳本沒有意義。這3個腳本正常工作分開,但我第一次嘗試先2個腳本合併,我getitng文件錯誤的unexpecetd結束的時候我執行這個腳本:

SCRIPT1 + script2.sh

if [ $# -ne 3 ] 
then 
    # RETURN INVALID USAGE 
    GetBatchCredentials_Result="Error" 
    GetBatchCredentials_Reason="Invalid usage: . $0 ApplicationId Alias Logfile" 
else 
    #SET UP INFRASTRUCTURE CLASSPATH 
    . /www/inf/xxxx/inf_security_common/2.0/scripts/script3.sh 

    #CALL JAVA GetBatchCredentials TO RETRIEVE THE SERVICE ACCOUNT CREDENTIALS 
    RSLT='$JAVA_HOME/bin/java com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3' 
    eval "$RSLT"; 
fi 

我運行上面的腳本中使用下面的腳本:

testScript.sh

. /www/inf/xxxx/inf_security_common/2.0/scripts/GetBatchCredentials.sh SampleBatchAppId xxxxAlias gbc.log 
if [ "$GetBatchCredentials_Result" != "Success" ] 
then 
    echo "Error obtaining FTP Credentials" 
    echo $GetBatchCredentials_Reason 
    ret=1 
else 
    echo "Obtained FTP Credentials" 
    ########### FTP User ID ################################ 
    FTP_USR=$GetBatchCredentials_ID 
    ########### FTP Password ############################### 
    FTP_PWD=$GetBatchCredentials_PW 
    echo "starting FTP" $FTP_USR $FTP_PWD 
fi 

請幫我解決這個錯誤。

+0

放聲需** **最小 - 削減到包括產生給定的錯誤所需要的代碼只有最小量。這可以像刪除事件一樣簡單,直到錯誤不再發生,撤銷保留所需的一行。 –

+0

......在這裏有一堆無關的bug,順便說一句,http://shellcheck.net/上的自動化工具會抓住它。 –

+0

(另外,這裏沒有很好的理由使用'eval';參見http://mywiki.wooledge.org/BashFAQ/048的BashFAQ#48,瞭解爲什麼你不應該使用'eval',除非你有絕對沒有其他選擇)。 –

回答

0

我不確定究竟是什麼工作,但我刪除並重新使用vim命令。新文件正在運行。這是我的新文件:

############################################################################### 

if [ $# -ne 3 ] 
then 
    # RETURN INVALID USAGE 
    GetBatchCredentials_Result="Error" 
    GetBatchCredentials_Reason="Invalid usage: . $0 ApplicationId Alias Logfile" 
else 
    # SET UP INFRASTRUCTURE CLASSPATH 
    CLASSPATH=$CLASSPATH:/www/inf/xxxx/inf_security_common/2.0/inf-security-common-2.0.jar 
    export CLASSPATH 

    # TODO - This needs to be set internally. 
    PROP="-Dcom.xxxx.env.location.pdc=ITC" 
    # CALL JAVA GetBatchCredentials TO RETRIEVE THE SERVICE ACCOUNT CREDENTIALS 
    RSLT=`$JAVA_HOME/bin/java $PROP com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3` 
    eval "$RSLT"; 
fi 
0
RSLT='$JAVA_HOME/bin/java com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3' 

應該是:

RSLT=`$JAVA_HOME/bin/java com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3` 

你在原來的劇本在合併腳本改變了反引號爲單引號。

另一個區別。原來script2.sh有:

PROP="-Dcom.xxxx.env.location.pdc=ITC" 
$JAVA_HOME/bin/java $PROP com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3 

新的腳本是缺少從呼叫java$PROP。它應該是:

RSLT=`$JAVA_HOME/bin/java -Dcom.xxxx.env.location.pdc=ITC com.xxxx.inf.serviceaccount.batch.GetBatchCredentials $1 $2 $3 
+0

我改變了這一點,再次反彈。但錯誤仍然相同。 – devlperMoose

+0

發現另一個錯誤,您錯過了'$ PROP'替換。 – Barmar

+0

感謝您的更正。我更新了腳本。但錯誤仍然存​​在。 – devlperMoose