免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6905 | 回复: 10
打印 上一主题 下一主题

`<<' unmatched 怎么改正 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-16 14:50 |只看该作者 |倒序浏览
我有一段shell,执行时总是报错:
nad_ldr[10]: syntax error at line 35 : `<<' unmatched

该shell的第35行内容为:
34
  35    sqlplus -s siebel/siebel >>/dev/null<<EOF
  36        insert into nad_eventlog(
  37        ACTION_NAME,
  38        ACTION_START_DATE,
  ......
  ......
我写其他shell时也碰到过这个问题,比如:   
   ftp -i -n << EOF
    open $HOST
     ......

可是有时候又是可以的,
请问这个错误怎么引起的?如何改正啊?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2004-08-16 15:21 |只看该作者

`<<' unmatched 怎么改正

<<EOF
...
EOF

论坛徽章:
0
3 [报告]
发表于 2004-08-16 16:20 |只看该作者

`<<' unmatched 怎么改正

我是这么写的呀.

下面是我的完整shell,黑体部分是出错的那行,请bjgirl和各位高手再帮我看看,谢谢!

#!/bin/ksh

if [ $# -lt 1 ]; then
  echo "Usage: nad_ctl SOURCE_TYPE"
  exit 1
fi

FILE_TYPE=$1

for FILE_NAME in `ls in/${FILE_TYPE}/*.txt|cut -d "." -f 1|cut -d "/" -f 3`
do
  echo ${FILE_NAME}
  sqlldr siebel/siebel control=./in/${FILE_TYPE}/${FILE_NAME}.ctl log=./log/${FILE_NAME}.log bad=./bad/${FILE_NAME}.bad

  FLAT_FILE_NAME="./in/${FILE_TYPE}/${FILE_NAME}.txt"
  LOG_FILE_NAME="./log/${FILE_NAME}.log"
  if [ -e "./bad/${FILE_NAME}.bad" ]; then
    BAD_FILE_NAME="./bad/${FILE_NAME}.bad"
    BAD_RECDS=`cat ${BAD_FILE_NAME}|wc -l`
  else
    BAD_FILE_NAME="null"
    BAD_RECDS=0
  fi
  START_DATE=`grep "Run began on" ${LOG_FILE_NAME}|awk '{print $5,$6,$7,$8}'`
  END_DATE=`grep "Run ended on" ${LOG_FILE_NAME}|awk '{print $5,$6,$7,$8}'`
  TOTAL_RECDS=`cat ${FLAT_FILE_NAME}|wc -l`
  LOAD_RECDS=`sqlplus -s siebel/siebel<<EOF
                 SET TERM OFF
                 SET HEAD OFF
                 SET FEED OFF
                 SELECT COUNT(*) FROM NAD_${FILE_TYPE}_TMP;
                 EXIT;
               EOF`


sqlplus -s siebel/siebel>/dev/null<<EOF
      SET FEED OFF
      SET HEAD OFF
      SET TERM OFF
      insert into nad_eventlog
      (
      ACTION_NAME,
      ACTION_START_DATE,
      ACTION_FINISH_DATE,
      ACTION_OUTCOME,
      FLAT_FILE_NAME,
      LOG_FILE_NAME,
      BAD_FILE_NAME,
      NBR_OF_TOTAL_RECORDS,
      NUMBER_OF_RECORDS_LOADED,
      NBR_OF_REJECTED_RECORDS
      )
      values(
      'Data Loading',
      to_date('${START_DATE}','Mon dd hh24:mi:ss yyyy'),
      to_date('${END_DATE}','Mon dd hh24:mi:ss yyyy'),
      'LOADED',
      ${FLAT_FILE_NAME},
      ${LOG_FILE_NAME},
      ${BAD_FILE_NAME},
      ${TOTAL_RECDS},
      ${LOAD_RECDS},
      ${BAD_RECDS}
      );
      commit;
      exit;
  EOF

  mv ./in/${FILE_TYPE}/${FILE_NAME}.txt ./inbak/${FILE_TYPE}/${FILE_NAME}.txt
  mv ./in/${FILE_TYPE}/${FILE_NAME}.ctl ./inbak/${FILE_TYPE}/${FILE_NAME}.ctl

done

论坛徽章:
0
4 [报告]
发表于 2004-08-16 16:26 |只看该作者

`<<' unmatched 怎么改正

LOAD_RECDS=`sqlplus -s siebel/siebel<<EOF

少了一个`

论坛徽章:
0
5 [报告]
发表于 2004-08-16 16:47 |只看该作者

`<<' unmatched 怎么改正

应该没有少,如果没有后面那次因为insert对sqlplus的调用,可以用echo ${LOAD_RECDS}正确显示出LOAD_RECDS的值的

LOAD_RECDS=`sqlplus -s siebel/siebel<<EOF
SET TERM OFF
SET HEAD OFF
SET FEED OFF
SELECT COUNT(*) FROM NAD_${FILE_TYPE}_TMP;
EXIT;
EOF`

论坛徽章:
0
6 [报告]
发表于 2004-08-16 17:05 |只看该作者

`<<' unmatched 怎么改正

找篇HERE文档的说明看看吧

论坛徽章:
0
7 [报告]
发表于 2004-08-16 17:13 |只看该作者

`<<' unmatched 怎么改正

谢谢bjgirl,

什么是here文档?

论坛徽章:
0
8 [报告]
发表于 2004-08-17 09:36 |只看该作者

`<<' unmatched 怎么改正

我也碰见过这个问题,如果单独调用sqlplus命令,没有问题;但是在if判断后面加入sqlplus命令,就会出现报错。楼上的我看了你的脚本,ORACLE_HOME/bin环境变量有没有问题。。

论坛徽章:
0
9 [报告]
发表于 2004-08-17 10:38 |只看该作者

`<<' unmatched 怎么改正

EOF前面不能有空格,必须是行的起始位置,呵呵(注意后面脚本的黑体部分)

谢谢各位的热心帮助

SOURCE: http://www.lazydba.com/oracle/0__37194.html

sqlplus -s siebel/siebel>/dev/null<<EOF
SET FEED OFF
SET HEAD OFF
SET TERM OFF
insert into nad_eventlog
(
ACTION_NAME,
ACTION_START_DATE,
ACTION_FINISH_DATE,
ACTION_OUTCOME,
FLAT_FILE_NAME,
LOG_FILE_NAME,
BAD_FILE_NAME,
NBR_OF_TOTAL_RECORDS,
NUMBER_OF_RECORDS_LOADED,
NBR_OF_REJECTED_RECORDS
)
values(
'Data Loading',
to_date('${START_DATE}','Mon dd hh24:mi:ss yyyy'),
to_date('${END_DATE}','Mon dd hh24:mi:ss yyyy'),
'LOADED',
${FLAT_FILE_NAME},
${LOG_FILE_NAME},
${BAD_FILE_NAME},
${TOTAL_RECDS},
${LOAD_RECDS},
${BAD_RECDS}
);
commit;
exit;
EOF

论坛徽章:
0
10 [报告]
发表于 2018-11-22 08:37 |只看该作者
感谢楼主的无私分享,你是怎么找到EOF前面不能有空格的解决方法的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP