2016-03-17 1 views
2

Итак, я пытаюсь запустить ftp-скрипт, но я ударяю об этом. Вот сценарий:EOT в условном разделе сценария bash

#!/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, он выполняет хорошо, но СРВ является единственным средством с помощью которых команды ftp могут запускаться без вмешательства пользователя. Кто-нибудь знает, как разместить EOT в условном выражении, не вызывая ошибки, которые я получаю.

+1

попробуйте использовать << - EOF вместо << EOF (Примечание дефис) сохраняться ваши отступы – ritesht93

+0

Кроме того, '<< - EOF' требует вкладки в одиночку, как отступы , а не пробелы. – chepner

ответ

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 instea d из <<EOT (Примечание дефис) сохраняться ваши отступы

+1

Разделитель heredoc может быть отступом с вкладками, а не пробелами, с '<< - EOF'. – chepner

5

Закрытие EOT должно быть в начале строки без предшествующих пробелов или вкладок. Попробуйте это:

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

без радости, но метод ritesht93 работал. thanks – anark10n

Смежные вопросы