我正在为一些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错误。我猜是因为这本书可能已经过时了。
再次感谢所有帮助。
答案 0 :(得分:2)
你的HEREDOC终结者是非常的。它们必须位于该行的开头。
e.g。
cat << EOF
foo bar
EOF
^^^--these spaces matter
由于这些空格,终结符被视为[space][space][space]EOF
,并且永远不会与EOF
匹配。
由于您的第一个EOF永远不会终止,因此shell会在脚本末尾运行而不会看到fi
,因为您拥有的fi
实际上被视为输出,而不是控制序列。< / p>