脚本生成脚本的一个错误

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

脚本生成脚本的一个错误

#1

帖子 7rack » 2011-12-11 10:26

源代码是

代码: 全选

#!/bin/bash
  # generate-script.sh
  # 这个脚本的诞生基于Albert Reiner的一个主意. 

  OUTFILE=generated.sh        


  # -----------------------------------------------------------
  
  (
  cat <<'EOF'
  #!/bin/bash

  echo "This is a generated shell script."
  #  Note that since we are inside a subshell,
  #+ we can't access variables in the "outside" script.

  echo "Generated file will be named: $OUTFILE"
  #  Above line will not work as normally expected
  #+ because parameter expansion has been disabled.
  #  Instead, the result is literal output.

  a=7
  b=3

  let "c = $a * $b"
  echo "c = $c"

  exit 0
  EOF
  ) > $OUTFILE
  # -----------------------------------------------------------

  #  将'limit string'引用起来将会阻止上边
  #+ here document消息体中的变量扩展. 
  #  这会使得输出文件中的内容保持here document消息体中的原文. 

  if [ -f "$OUTFILE" ]
  then
  chmod 755 $OUTFILE 
  else
    echo "Problem in creating file: \"$OUTFILE\""
  fi

  exit 0


产生的错误是

代码: 全选

./generate-script: 行 50: 警告: 立即文档在第 11 行被文件结束符分隔 (需要 `EOF')
./generate-script: 行 51: 语法错误: 未预期的文件结尾
应该是EOF哪里出问题了吧,前一个用的是单引号。顺便问一下vim下哪个插件能让编辑好的代码,在最后自动调整对其(排版),像vs2008中的ALT+F8吧
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

Re: 脚本生成脚本的一个错误

#2

帖子 7rack » 2011-12-11 10:52

仔细看错误提示是

代码: 全选

(需要 `EOF')
而不是单引号,为什么呢
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 脚本生成脚本的一个错误

#3

帖子 枫叶饭团 » 2011-12-11 11:29

还有let,这多老的脚本啊 第50行是哪一行
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

Re: 脚本生成脚本的一个错误

#4

帖子 7rack » 2011-12-11 11:33

枫叶饭团 写了:还有let,这多老的脚本啊 第50行是哪一行
现在都用

代码: 全选

((。。。))
:em01在vim里显示就50行啊,第50行是

代码: 全选

 exit 0
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 脚本生成脚本的一个错误

#5

帖子 fnan » 2011-12-11 22:32

EOF 这行要确保没有一个空格。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

Re: 脚本生成脚本的一个错误

#6

帖子 7rack » 2011-12-11 23:26

fnan 写了:EOF 这行要确保没有一个空格。
大牛能说说为什么吗? :em01
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 脚本生成脚本的一个错误

#7

帖子 fnan » 2011-12-12 6:15

'EOF ' 与 'EOF' 是不同的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
7rack
帖子: 96
注册时间: 2011-08-17 22:49

Re: 脚本生成脚本的一个错误

#8

帖子 7rack » 2011-12-12 9:58

fnan 写了:'EOF ' 与 'EOF' 是不同的。
原来又是空格的问题啊, :em06
回复