нужна помощь с shell скриптом

Тема в разделе "Другие языки", создана пользователем globalmoney, 4 сен 2010.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. globalmoney

    globalmoney

    Регистр.:
    28 апр 2007
    Сообщения:
    406
    Симпатии:
    29
    Есть скрипт:
    Код:
    #!/bin/sh
    IP='ip сервера'
    USER='логин'
    PASSWD='пароль'
    #переходим в каталог, где лежат файлы на сервере
    cd /backup
    #запускаем консольный FTP клиент
    ftp -n $IP
    user $USER $PASSWD
    #переходим в каталог на FTP, куда нужно положить эти файлы
    cd /backup
    #копируем файл
    put file-*
    put file.conf
    .....
    #Закрываем сессию FTP
    close
    #Выходим из FTP
    bye
    
    Но проблема в том, что почему то авторизация после подключения к серверу, не происходит.
    Кто ни будь знает как это можно исправить?
     
  2. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    59
    Смотри, на строчке
    Код:
    ftp -n $IP
    шелл запускает внешнюю программу ftp и ждет ее завершения, а следующая строка
    Код:
    user $USER $PASSWD
    будет выполнена после завершения предыдущей.
    Для передачи команд во внешнюю программу надо использовать другие инструменты, могу порекомендовать expect.
    Скрипт на нем будет выглядеть как-то так.
    Код:
    #!/usr/bin/expect -f
    set SERVER "ftp.site.ru"
    set USERNAME "mylogin"
    set PASS "mypass"
    log_user 1
    spawn ftp $SERVER
    expect "username:"
    send "$USERNAME\r"
    expect "password:"
    send "$PASS\r"
    expect "ftp>"
    send "bin\r"
    expect "ftp>"
    send "put file-*\r"
    expect "ftp>"
    send "bye\r"
    expect eof
     
    globalmoney нравится это.
  3. globalmoney

    globalmoney

    Регистр.:
    28 апр 2007
    Сообщения:
    406
    Симпатии:
    29
    Спасибо за пример.
    Дело в том, что раньше ни когда не сталкивался с expect, поэтому у меня вопрос, как в нём получить системную дату и присвоить её переменной?
     
  4. zardoz

    zardoz Постоялец

    Регистр.:
    6 май 2008
    Сообщения:
    84
    Симпатии:
    59
    expect использует tcl в качестве скриптового движка.
    Присвоение системной даты переменной на tcl выглядит так:
    Код:
    set myvar [exec date +%d.%m.%Y]
    
     
    globalmoney нравится это.
Статус темы:
Закрыта.