Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Bash скрипт архивации и перемещения на FTP  (Прочитано 2409 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kuliev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Доброго времени суток всем. Это мой первый пост, если не туда разместил, то прошу модератора перенести в нужный раздел.

Теперь собственно вопрос знающим:
У меня есть скрипт который в условии проверяет существования файлов и если все ОК то грузит данные файлы, но беда в том что строки управления FTP находятся в теле конструкции IF и не в какую не хотят выполнятся.
Вот часть кода:
FILES=( file1.txt file2.txt file3.txt )

if [ 3 -eq 3];
 then
   ftp -n 192.168.1.190 <<END
   quote USER arhive
   quote PASS password
   prompt
   bin
   passive
   cd arhive
   mput ${FILES[@]}
   quit
   END
fi
В итоге пишет что: ./test: строка 17: внимание: документ неожиданно заканчивается на строке 7 (ожидалось `END')
./test: строка 18: ошибка синтаксиса: неожиданный конец файла


Если вынести загрузку из тела конструкции IF, то все ОК.
Кто знает как победить чтобы работало в теле конструкции.


Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #1 : 23 Декабря 2015, 16:35:13 »
   ftp -n 192.168.1.190 <<\END
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Kuliev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #2 : 23 Декабря 2015, 19:27:55 »
   ftp -n 192.168.1.190 <<\END

Спасибо за ответ, но все равно такая же ошибка не нравится ему перенаправление <<

# Connect to FTP server WD
if [[ $num -eq $cnt ]]
 then
  ftp -n $FTPHOST <<\END
  quote USER $FTPU
  quote PASS $FTPP
  prompt
  bin
  passive
  cd arhive
  mput ${REPORT[@]}
  quit
  END # РУГАЕТСЯ НА ЭТО

   # Delete backups items PostgreSQL
   for (( i = 0 ; i < cnt ; i++))
    do
     echo rm $DATE-${NAMEDB[$i]}.pgsql.gz
   done

   # Send message for administrator email
   echo "${REPORT[@]}" | mail -s "$SUBJECT" $MAIL
fi



Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #3 : 23 Декабря 2015, 19:30:48 »
Покажите весь скрипт и какой командой запускаете.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Kuliev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #4 : 23 Декабря 2015, 19:36:17 »
Покажите весь скрипт и какой командой запускаете.
#!/bin/bash
# Upload backups for SQL base 1C


# Set variable
DATE=$(date +%d-%m-%Y-%H-%M-%S)
MAIL="aaa@mail.ru"
SUBJECT="Архивирование базы 1С"
FTPHOST="192.168.1.190"
FTPU="arhive"
FTPP="111"
NAMEDB=( vgdb moonlight eldisp tsj25 )

# Count item array
cnt=${#NAMEDB[@]}


for (( i = 0 ; i < cnt ; i++ ))
do
 # Start zip DUMP SQL base
 pg_dump -U postgres ${NAMEDB[$i]} | gzip >  /mnt/backup/$DATE-${NAMEDB[$i]}.pgsql.gz
 REPORT[$i]="$DATE-${NAMEDB[$i]}.pgsql.gz"
done

# Open dir
cd /mnt/backup/

# Find and exist file
for (( i = 0 ; i < cnt ; i++ ))
 do
  if test -e "${REPORT[$i]}";
   then
    num=$(($num+1))
  fi

# Connect to FTP server WD
if [[ $num -eq $cnt ]]
 then
  ftp -n $FTPHOST <<\END
  quote USER $FTPU
  quote PASS $FTPP
  prompt
  bin
  passive
  cd arhive
  mput ${REPORT[@]}
  quit
 END

   # Delete backups items PostgreSQL
   for (( i = 0 ; i < cnt ; i++))
    do
     rm $DATE-${NAMEDB[$i]}.pgsql.gz
   done

   # Send message for administrator email
   echo "${REPORT[@]}" | mail -s "$SUBJECT" $MAIL
fi


Вот весь скрипт целиком

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #5 : 23 Декабря 2015, 21:31:34 »
Пропущено done после  if test -e "${REPORT[$i]}";
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Kuliev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #6 : 23 Декабря 2015, 22:10:11 »
Пропущено done после  if test -e "${REPORT[$i]}";

Добавил DONE закрыл цикл но ошибка осталась
./backupFtp.sh: строка 65: внимание: документ неожиданно заканчивается на строке
./backupFtp.sh: строка 66: ошибка синтаксиса: неожиданный конец файла

Скрин https://yadi.sk/i/7VerGeEsmSQdE

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #7 : 24 Декабря 2015, 00:10:59 »
<<\END
  quote USER $FTPU
  quote PASS $FTPP
  prompt
  bin
  passive
  cd arhive
  mput ${REPORT[@]}
  quit
 END
В этом скорее всего проблема. Это разве не
(Нажмите, чтобы показать/скрыть)
или в эхо эти строки вписать:
Код: (bash) [Выделить]
#!/bin/bash
# Upload backups for SQL base 1C

# Set variable
DATE=$(date +%d-%m-%Y-%H-%M-%S)
MAIL="aaa@mail.ru"
SUBJECT="Архивирование базы 1С"
FTPHOST="192.168.1.190"
FTPU="arhive"
FTPP="111"
NAMEDB=( vgdb moonlight eldisp tsj25 )

# Count item array
cnt=${#NAMEDB[@]}

for (( i = 0 ; i < cnt ; i++ )); do
 # Start zip DUMP SQL base
 pg_dump -U postgres ${NAMEDB[$i]} | gzip > /mnt/backup/$DATE-${NAMEDB[$i]}.pgsql.gz
 REPORT[$i]="$DATE-${NAMEDB[$i]}.pgsql.gz"
done

# Open dir
cd /mnt/backup/

# Find and exist file
for (( i = 0 ; i < cnt ; i++ )); do [ -e "${REPORT[$i]}" ] && num=$(($num+1)); done

# Connect to FTP server WD
if [[ $num -eq $cnt ]]; then
echo "quote USER $FTPU
quote PASS $FTPP
prompt
bin
passive
cd arhive
mput ${REPORT[@]}
quit" | ftp -n $FTPHOST

   # Delete backups items PostgreSQL
   for (( i = 0 ; i < cnt ; i++)); do rm $DATE-${NAMEDB[$i]}.pgsql.gz; done

   # Send message for administrator email
   echo "${REPORT[@]}" | mail -s "$SUBJECT" $MAIL
fi

« Последнее редактирование: 24 Декабря 2015, 00:14:01 от Cxms »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #8 : 24 Декабря 2015, 01:24:52 »
Попробуйте убрать отступы  ftp -n $FTPHOST <<\END
quote USER $FTPU
quote PASS $FTPP
prompt
bin
passive
cd arhive
mput ${REPORT[@]}
quit
END
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Kuliev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Re: Bash скрипт архивации и перемещения на FTP
« Ответ #9 : 24 Декабря 2015, 07:29:52 »
Всем спасибо за ответы.
Сделал тестовый скрипт
#!/bin/bash

FILES=( file1 file2 file3 )

cd /mnt/flash

if [ 2 -eq 2 ];
 then
ftp -n 192.168.1.190 <<END
quote USER arhive
quote PASS 11
prompt
bin
passive
cd arhive
mput ${FILES[@]}
quit
END

fi


Вот так заработало. Всем спасибо.

« Последнее редактирование: 20 Июня 2019, 08:29:54 от zg_nico »

 

Страница сгенерирована за 0.068 секунд. Запросов: 23.