You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本语法报错排查:line 65意外EOF问题求助

问题排查与解决

你的语法错误核心原因是here-doc结束分隔符的缩进问题,以及分隔符写法不符合bash规范:

错误点分析

  1. 结束分隔符存在前导空白:代码中:EOF前面有缩进空格,bash要求here-doc的结束分隔符必须是单独一行的第一个字符,不能有任何前导空格、制表符,否则bash无法识别结束标记,会一直读取到脚本末尾,从而抛出unexpected EOF和unexpected end of file错误。
  2. 分隔符写法冗余::EOF不是bash here-doc的标准写法,若需要展开${ORA_USER}、${ID}这类变量,直接用EOF即可;若要抑制变量展开,用'EOF'包裹分隔符。

修正后的代码片段

while IFS="," read -r ID New; do

    USER_CHECK=$(sqlplus -S /nolog <<EOF
    CONNECT ${ORA_USER}/${ORA_USER}@${ORA_STRING};
    set colsep ,
    set linesize 32767
    set pagesize 9999
    set markup CSV on
    set feedback on
    set heading on

    SELECT COUNT(*) FROM ATTRIBUTES WHERE USER_ID = '${ID}';

    quit
EOF
    )

关键说明

  • 结束的EOF必须单独占一行,无任何前导空格,和开头的<<EOF完全匹配。
  • 若想保留缩进可读性,可使用<<-EOF(注意减号),此时结束分隔符前的制表符(Tab)会被忽略,但空格仍然不被允许,需确保脚本中用Tab而非空格缩进结束标记。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:07:12