我在为 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/