if语句中的bash EOF

时间:2012-02-19 13:34:34

标签: bash conditional eof

我正在尝试在Bash的IF ELSE语句中执行操作,但收到类似这样的错误:

语法错误:文件结束意外(期待“fi”)

现在我对此很陌生,所以解决我的问题可能不会那么困难:)

if [ "$DAYNAME" = 'Sunday' ]; then
    echo 'The backup will be uploaded'
    ftp -n $HOST <<EOF
        quote USER $USER
        quote PASS $PASSWD
        put $filetoday
        delete ${filethreeweeksago}
        quit
    EOF
fi

当然,变量已经填满了。

我认为它与EOF表示法有关,因为当我删除它们时,问题就会消失。不幸的是,我不知道如何在没有EOF表示法的情况下使用代码。

有谁能告诉我为什么会出现这个错误?

4 个答案:

答案 0 :(得分:12)

删除空白,它应该有效:

    EOF
^^^^

答案 1 :(得分:1)

如果要保留标签,请在EOF中添加短划线: 从:

ftp -n $HOST <<EOF

为:

ftp -n $HOST <<-EOF

答案 2 :(得分:1)

https://github.com/koalaman/shellcheck/wiki/SC1039

<块引用>

此处的文档分隔符如果缩进将无法识别。

您可以通过以下两种方式之一进行修复:

1. 只需删除缩进,即使这可能会破坏格式。

2.使用<<-代替<<,并仅使用制表符缩进脚本(无法识别空格)。

最好删除缩进,因为如果重新格式化、复制粘贴或使用其他编辑器保存脚本,脚本不会突然中断。

答案 3 :(得分:0)

If-Else内的终止服务

EOL的语法可以是这种类型

if [ condition ]; then
    echo "Comment"
else
    cat >> file.txt <<-EOL

    EOL
fi