[英]I'm getting an unexpected end of file error with my script
我為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
實際上被視為輸出,而不是控制序列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.