EOT在bash脚本的条件部分

时间:2016-03-17 07:48:28

标签: bash ftp

所以,我正在尝试使用ftp脚本,但是我遇到了麻烦。这是脚本:

#!/bin/bash
HOST='192.168.178.122'
USER='ftpuser'
PASSWD='passa.2015'
DATE=`date +%d-%m-%Y`
FILE="archive-"$DATE".tar.gz"

prep=0
echo "File is="$FILE
echo "Prepare_val="$prep
if [ $prep -eq 0 ]
    then
        find Web -maxdepth 1 -mindepth 1 -not -type l -print0 | tar --null --files-from - -cpzvf $FILE

        ftp -n $HOST << EOT
        user $USER $PASSWD
        put $FILE
        quit
        bye
        EOT
fi

当我尝试运行此脚本时,它会返回以下错误:

ftp-script.sh: 22: ftp-script.sh: Syntax error: end of file unexpected (expecting "fi")

如果我删除EOT部分,它执行正常,但EOT是运行ftp命令而无需用户干预的唯一方法。有没有人知道如何在条件中放置EOT而不会导致我得到的错误。

2 个答案:

答案 0 :(得分:5)

结束EOT必须位于该行的开头,没有前一个空格或制表符。 试试这个:

        ftp -n $HOST << EOT
        user $USER $PASSWD
        put $FILE
        quit
        bye
EOT

答案 1 :(得分:3)

您可以坚持缩进以获得更好的可读性:

script.bash的内容:

#!/bin/bash
#normal usage
cat <<EOF
abcd
xyz
EOF
echo "*************************"
#using heredoc without script indentation
if [[ true ]]; then
    cat <<EOF
abcd
xyz
EOF
fi
echo "*************************"
#using heredoc with script indentation
if [[ true ]]; then
    cat <<-EOF
    abcd
    xyz
    EOF
fi

输出:

$ ./script.bash 
abcd
xyz
*************************
abcd
xyz
*************************
abcd
xyz
$

底线:使用<<-EOT代替<<EOT(请注意连字符)以保留缩进