gpt4 book ai didi

linux - `newline' 运行 shell 脚本时出现意外

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:23 24 4
gpt4 key购买 nike

我是 unix 命令新手。我想执行 jasper 文件 P70152R1 并将 busDt 参数传递给该文件。当前遇到此错误>>> 第 51 行:第 53 行语法错误:`newline' 意外

谁能帮我检查一下我的 shell 脚本。

下面是我的脚本:

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

非常感谢您的帮助。感谢您提前告知!

最佳答案

<>字符在 bash 中具有特殊含义。您在

中使用了它们
echo "set heading off;" > $LOG/busDtSel.sql

将 echo 的输出重定向到 $LOG/busDtSel.sql .

在第 53 行中,您执行以下操作:

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

这意味着 JRGenerator 的最后一个参数是 -P ,标准输入来自文件 BUS-DATE:$busDt而那个标准输出,嗯,什么也没有。有一条新线。这对于 bash 来说是出乎意料的,因为它期望标准输出的目的地。因此出现错误消息。

解决方案是使用引号:

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

您的脚本中还存在其他问题;例如:有一行:

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

显然应该是:

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

我认为将脚本放入问题中可能是一个错误,因为这会为我生成不同的错误消息。

关于linux - `newline' 运行 shell 脚本时出现意外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51168714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com