linux - 我的脚本出现意外的文件结束错误

标签 linux scripting

我在为 Linux 脚本编写的代码中遇到了一些问题。 这是代码:

report_home_space ()
{
if [[ $(id -u) -eq 0 ]]; then
        cat << _eof_
                 <H2>Home Space Utilization (All Users)</H2>
                 <PRE>$(du -sh /home/*)</PRE>
               _eof_
else
        cat << _eof_
                 <H2>Home Space Utilization ($USER)</H2>
                 <PRE>$(du -sh $HOME)</PRE>
               _eof_
fi
return
}

脚本中还有其他函数,但它们都可以正常工作。该脚本在这段代码的某处围绕文件标记的结尾提取错误,但我找不到它。我有 if 语句的 fi 语句和我的文件结尾标记都匹配。

如有任何帮助,我们将不胜感激。

在查看了提供的一些答案后,我能够摆脱最初的意外 eof 错误,但同样的错误再次发生,但发生在我脚本中的不同位置。 (准确地说是第 58 行,脚本的最后一行)。我将提供整个脚本以便对其进行检查。

#!/bin/bash


#Program is used to output sys info as a web page

TITLE="System Information Report for $HOSTNAME"
CURRENT_TIME=$(date +"%x %r %Z")
TIME_STAMP="Generated $CURRENT_TIME, by $USER"

report_uptime () 
{
cat <<- _eof_
           <H2>System uptime</H2>
           <PRE>$(uptime)</PRE>
       _eof_
return
}

report_disk_space ()
{
cat <<- _eof_
           <H2>Disk space utilization</H2>
           <PRE>$(df -h)</PRE>
       _eof_
return
}

report_home_space () {
 if [[ $(id -u) -eq 0 ]]; then
                cat <<- _eof_
                           <H2>Home Space Ultilization (All Users)</H2>
                           <PRE>$(du -sh /home/*)</PRE>
                           _eof_
        else
                cat <<- _eof_
                           <H2>Home Space Ultilization ($USER)</H2>
                           <PRE>$(du -sh $HOME)</PRE>
                           _eof_
        fi
        return
}


cat <<- _eof_
      <HTML>
           <HEAD>
                     <TITLE>$TITLE</TITLE>
           </HEAD>
           <BODY>
                       <H1>$TITLE</H1>
                       <P1>$TIME_STAMP</P1>
                       $(report_uptime)
                       $(report_disk_space)
                       $(report_home_space)
           </BODY>
      </HTML>
_eof_

我尝试将 EOF 移至行首,但效果不佳。这个脚本在我正在阅读的一本命令行书中,我准确地复制了这个脚本,它抛出了 EOF 错误。我猜是因为这本书可能已经过时了。

再次感谢大家的帮助。

最佳答案

您的 HEREDOC 终止符不正确。它们必须在行的开头。

例如

cat << EOF
   foo bar
   EOF
^^^--these spaces matter

由于这些空格,终止符被视为 [space][space][space]EOF,并且永远不会单独匹配 EOF

由于您的第一个 EOF 永远不会终止,因此 shell 在没有看到 fi 的情况下运行到脚本的末尾,因为您拥有的 fi 实际上被视为输出,不是控制序列。

关于linux - 我的脚本出现意外的文件结束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494728/

相关文章:

linux - 如何运行同一脚本的多个 perl 实例?

linux - linux下X上的系统范围键盘 Hook

linux - 与现有文件的符号链接(symbolic link)和取消符号链接(symbolic link)

linux - 尝试在 Ubuntu 上运行 .net Core HelloWorld 控制台应用程序

python - .py 文件从 Linux 到 Windows : is it going to just work?

c - 使用 C 挂载 vfat 镜像 win linux

linux - 如何让我的 bash 脚本从变量中删除前 n 行和最后 n 行?`

javascript - 在运行 javascript 时防止 Windows 提示打开

Bash:多重模式匹配

c# - 我们有一个图形设计师,现在他们想要一个基于文本的设计师。建议?