«новая строка» неожиданна при запуске сценария оболочки - PullRequest
0 голосов
/ 04 июля 2018

Я новичок в команде Unix. Я хотел бы выполнить файл Jasper P70152R1 и передать параметр busDt в этот файл. В настоящее время попали в эту ошибку >>> строка 51: синтаксическая ошибка в строке 53: `newline 'неожиданный

Может кто-нибудь помочь мне проверить мой сценарий оболочки.

Ниже мой сценарий:

echo "*********************************************************"
echo "*         xxxxxxxxxxxxxxxxxxxxxxxxx                     *"
echo "*********************************************************"
echo
echo "*********************************************************************************"
echo "*                 xxxxxxxxxxxxxxxxxxxxxxxx                  *"
echo "*                            UP                             *"
echo "*     P700152R1 - AAAAAAAAAAAAAAAAAAA REPORT            *"
echo "*     P700152R2 - BBBBBBBBBBBBBBBBBBB REPORT        *"
echo "*     P700152R3 - CCCCCCCCCCCCCCCCCCC REPORT            *"
echo "*                           (JP700152)                          *"
echo "*                        FREQUENCY : DAILY                          *"
echo ****************************************************************************"
echo
cd $MAIN/CWJCL/ACQ
export JCL=$MAIN/CWJCL/ACQ
export PRM=$MAIN/CWPRM/ACQ:$MAIN/CWPRM/CMN
export JAS=$MAIN/CWRPT/ACQ
export rptDir=$MAIN/ACQ/DAILYRPT
export LOG=$MAIN/CWLOG/ACQ

echo "Start Time and Date : \c" &&date
echo
JP70152=`date +%Y%m%d%H%M%S`
$JCL/strtJob $JP70152 JP70152

# Classpath
. $JCL/SETENV
#export CLASSPATH=$CLASSPATH:$PRM:$LIB/acq-1.0.jar
export CLASSPATH=$CLASSPATH:$PRM:"$MAIN/CWLIB/classes/acq"

# Get Business Date
echo "set heading off;" > $LOG/busDtSel.sql
echo "spool $LOG/date.log;" >> $LOG/busDtSel.sql
echo "ALTER SESSION SET CURRENT_SCHEMA=CCPS;" >> $LOG/busDtSel.sql
echo "SELECT 'CURRENT-BUSS-DATE:'||F9_AP008_BUS_DT FROM AP008;" >> $LOG/busDtSel.sql
echo "spool off;" >> $LOG/busDtSel.sql
echo "EXIT;" >> $LOG/busDtSel.sql
echo
$JCL/CONNAM.sh $LOG/busDtSel.sql $LOG/sel_day
a=$?
if [ ! $a -eq 0 ]
then
   return $a
fi

tmpDt=`grep CURRENT-BUSS-DATE $LOG/date.log`
busDt=${tmpDt##*:}

# run program.
yyyymmdd=`date +%Y%m%d`
$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator -Ttxt -J$JAS/P70152R1.jasper -DACQ -O$rptDir/P70152R1.rpt -P<BUS-DATE:$busDt>
##########$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator -Ttxt -J$JAS/P70152R2.jasper -DACQ -O$rptDir/P70152R2.rpt -P<BUS-DATE:$busDt>
##########$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator -Ttxt -J$JAS/P70152R3.jasper -DACQ -O$rptDir/P70152R3.rpt -P<BUS-DATE:$busDt>
a=$?
echo $a
if [ ! $a -eq 0 ]
then
   return $a
fi
echo
echo
echo
$JCL/endJob $JP70152 JP70152
echo "End Time and Date : \c" &&date
echo
return $a

Очень ценю вашу помощь. Спасибо ID заранее!

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Привет, вы используете оператор > в конце вашей команды Java. Лучше использовать escape-последовательность, чтобы преодолеть эту проблему. Смотри ниже правильное выражение.

$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator -Ttxt -J$JAS/P70152R1.jasper -DACQ -O$rptDir/P70152R1.rpt -P\<BUS-DATE:$busDt\>

или, вы можете попробовать как показано ниже, как Ljm предоставил в своем ответе: -

$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator -Ttxt -J$JAS/P70152R1.jasper -DACQ -O$rptDir/P70152R1.rpt "-P<BUS-DATE:$busDt>" 
0 голосов
/ 04 июля 2018

Символы < и > имеют особое значение в bash. Вы использовали их в

echo "set heading off;" > $LOG/busDtSel.sql

, чтобы перенаправить вывод эха на $LOG/busDtSel.sql.

В своей строке 53 вы делаете:

$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator options -P<BUS-DATE:$busDt>

Это означает, что последним аргументом для JRGenerator является -P, что stdin происходит из файла BUS-DATE:$busDt, и что stdout ни к чему не приводит. Есть новая строка. Это неожиданно для bash, потому что он ожидал назначения для stdout. Отсюда и сообщение об ошибке.

Решение заключается в использовании кавычек:

$JAVA_HOME/bin/java my.com.eprotea.report.JRGenerator options "-P<BUS-DATE:$busDt>"

Есть и другие проблемы в вашем скрипте; например: есть строка с:

echo ************************************"

что, очевидно, должно быть:

echo "************************************"

Я думаю, что это может быть ошибкой при вводе сценария в вопрос, потому что это выдает мне другое сообщение об ошибке.

0 голосов
/ 04 июля 2018

Вы забыли добавить " в начале строки и поэтому все испортили:

        echo "*********************************************************************************"
        echo "*                 xxxxxxxxxxxxxxxxxxxxxxxx                  *"
        echo "*                            UP                             *"
        echo "*     P700152R1 - AAAAAAAAAAAAAAAAAAA REPORT            *"
        echo "*     P700152R2 - BBBBBBBBBBBBBBBBBBB REPORT        *"
        echo "*     P700152R3 - CCCCCCCCCCCCCCCCCCC REPORT            *"
        echo "*                           (JP700152)                          *"
        echo "*                        FREQUENCY : DAILY                          *"
HERE -> echo ****************************************************************************"
...