簡體   English   中英

我的腳本出現意外的文件結尾錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM