LINUX.ORG.RU

Специфика написания Shell скриптов в Линуксе


0

1

Доброго вам времени суток. Возможно глупый вопрос но:

Настраиваю на роутере прошивку openwrt, и нужен скрипт, который должен записать в файл результат выполнения команды ifconfig и положить его на FTP сервер. В качестве клиента использую cmdftp.

В консоле всё работает. По привычке пользователя Windows я написал скрипт, который (в Винде) просто подставлял бы значение строчек на каждый вопрос из консоли. Скрипт выглядит так:

---------------
ifconfig > /root/ip.txt     ## выводим ifconfig в файл
cmdftp -n 192.168.1.3      ## подключаемся к ftp серверу с ручным вводом логина\пароля
login                              ## на запрос программы о логине, вводим логин
passwd                           ## на запрос программы о пароле, вводим пароль
l                                    ## команда программе активировать локальный интерфейс
cd /root                         ## зайти в папку рута
u ip.txt /input            ## отправить файл на ftp, в папку input
quit                            ## отключиться от ftp сервера
---------------

Но при выполнении, скрипт успешно отрабатывается только до второй строки (запуска программы на подключение к серверу), после чего он останавливается и ftp-клиент «ждёт», пока будет введён логин. После закрытия программы скрипт продолжает выполнение, и вводит в консоль логин, пароль, итд.

Скорее всего я просто привык к bat скриптам, и в Линуксе подобное пишется по-другому. Подскажите пожалуйста, как именно. Мне нужно, чтобы скрипт просто «подставлял» заранее известные команды ftp-клиенту.

P.S: Мучаюсь со скриптом, а не с dyndns потому, что нужно знать локальный, а не внешний адрес. А в качестве ftp-клиента использую cmdftp из-за жёстких ограничений на память в роутере. Другие ftp-клиенты просто не помещаются в памяти :(

expect, задание параметров через export (небезопасно). Вот 2 направления.

pztrn ★★★★ ()

По идее должно быть что-то типа такого:

cat filewithftpcommands.txt | ftp

А вообще попробуй лучше нагуглить какой-нибудь аналогичный готовый скрипт и посмотри, как он будет работать.

Dobriy_i_Prostoy ()

Команды нужно подавать на STDIN запущенного процесса. Попробуйте:

cmdftp -n 192.168.1.3 <<END
login
passwd
l
cd /root
u ip.txt /input
quit
END

Здесь используется синтаксис here-doc, подробнее см. документацию по любому POSIX-совместимому шеллу, например, http://linux.die.net/man/1/ash.

AITap ★★★★★ ()

ssh и sftp есть в любом бизибоксе. А это значит, что можно сделать аутентификацию по ключам, и никакого подставления параметров не нужно.

Deleted ()

Скорее всего я просто привык к bat скриптам, и в Линуксе подобное пишется по-другому. Подскажите пожалуйста, как именно.

Хренасе подскажите. Читай ABS для начала.

sdio ★★★★★ ()

Let's go deeper

записать в файл результат выполнения команды ifconfig и положить его на FTP сервер

Зачем? Какая изначально стоит задача?

zolden ★★★★★ ()
Последнее исправление: zolden (всего исправлений: 1)
Ответ на: комментарий от kostik87

«Там» имелось ввиду на прошивке.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.