在Korn脚本中调用Shell脚本和Korn脚本

时间:2016-02-23 21:03:45

标签: sh ksh

我试图同时调用korn shell和shell脚本。在一个ksh。我的ksh脚本如下:

#!/bin/sh

. /u01/EPM/hyp_app/scripts/maxl/Start_Stop/Stop_All.ksh
. /app/Oracle/Middleware/user_projects/epmsystem1/bin/stop.sh 

这将成功运行.sh,但将无法运行.ksh,并返回此错误

/u01/EPM/hyp_app/scripts/maxl/Start_Stop/Stop_All.ksh: line 33: syntax error near unexpected token `;'
/u01/EPM/hyp_app/scripts/maxl/Start_Stop/Stop_All.ksh: line 33: `if [ $f1 != ' ' ]; then;'

但是当单独运行Stop_All.ksh时,它可以正常工作而没有任何问题。

为什么从其他地方运行时会出现语法错误,但直接运行时不会出现语法错误?请注意,此较大ksh的位置与Stop_All.ksh位于同一位置。所以它不是相对目录问题(我不认为)。

编辑:

部分问题是Stop_All.ksh中的文本文件在作为更大脚本的一部分运行时没有被创建(但是当我单独运行它时创建它没有问题。)

#Clears database log
echo ' ' > /u01/EPM/hyp_app/logs/Start_Stop/DatabaseList.log

# run filter export process
$ESS_ENV_DIR/startMaxl.sh $SCRIPT_DIR/maxl/Start_Stop/SpoolDatabase.mxl

echo ' ' > /u01/EPM/hyp_app/export/Start_Stop/Application_List.txt

# Parses it out in do 8 for start and stop, and insert | pipe
sed -i -e 's/./&|/21' -i -e 's/./&|/30' -i -e 's/./&|/40'  /u01/EPM/hyp_app/logs/Start_Stop/DatabaseList.log;
cat /u01/EPM/hyp_app/logs/Start_Stop/DatabaseList.log | grep 'TRUE' > /u01/EPM/hyp_app/export/Start_Stop/GrepApplication_List.txt
while IFS='|' read -r f1 f2 f3 f4 #f5
do echo $f1 $f2 >> /u01/EPM/hyp_app/export/Start_Stop/Application_List.txt
echo $f3 >> /u01/EPM/hyp_app/export/Start_Stop/Application_List.txt

# finishes do while and the points the input file that the IFS reads through (PUT DATABSE TXT FILE HERE)
done < /u01/EPM/hyp_app/export/Start_Stop/GrepApplication_List.txt;
while IFS=' ' read -r f1 f2 f3 f4 #f5
do 

 if [ $f1 != ' ' ]; then;
   $ESS_ENV_DIR/startMaxl.sh $SCRIPT_DIR/maxl/Start_Stop/Master_Stop.mxl $f1 $f2
    fi

2 个答案:

答案 0 :(得分:1)

当您测试if [ $f1 != ' ' ];时,您期望f1可以是一个空格。假设f1填充了空格。第if [ != ' ' ];行是错误的 我认为当你自己运行Stop_All.ksh时,f1充满了除空格之外的东西。
将您的代码更改为

if [ "$f1" != ' ' ];

或习惯使用花括号

的语法
if [ "${f1}" != ' ' ];

答案 1 :(得分:0)

感谢用户Nick Burns,

我必须将顶部更改为#!/ bin / ksh