На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
kapa
Сообщения: 143
Сообщение
kapa » 27.02.2006 18:16
bash 3.00.16
Пишу:
Код: Выделить всё
while :
do check_kassir() {
if mount_smbfs -I 192.168.1.25 -N -W OFIS //ROOT@STOUN/123 /123 | grep "Operatio
n timed out" > /dev/null;
then sleep 300;
elif
/root/refresh_mac_ip;
exit }
check_kassir
sleep 3;
done
Выдаёт:
Код: Выделить всё
./mount_kassir: line 10: syntax error near unexpected token `done'
./mount_kassir: line 10: `done'
Я не силён в программировании - никак не могу понять в чём ошибка.
Не подскажете?
madskull
Сообщения: 1019
Статус: Экс-металлюга
Контактная информация:
Сообщение
madskull » 27.02.2006 18:36
вместо elif подразумевалось fi , видимо.
Вообще-то странно все это. Почему бы не вынести объявление функции за цикл?
Arch Linux / Ice WM
kapa
Сообщения: 143
Сообщение
kapa » 27.02.2006 18:43
madskull писал(а): ↑ 27.02.2006 18:36
вместо elif подразумевалось fi , видимо.
Вообще-то странно все это. Почему бы не вынести объявление функции за цикл?
на fi он ругается так же как и на done
не вынести за цикл, потому что комп кассира может выключаться и включаться, ровно как и ребутиться маршрутер, на котором это должно крутиться, а скрипт, который обновляет пары ip-mac - как раз тащит их с компа кассира. (по-другому не придумал как реализовать)
JaGoTerr
Сообщения: 380
Сообщение
JaGoTerr » 27.02.2006 18:47
(madskull @ Feb 27 2006, в 18:36) писал(а): вместо elif подразумевалось fi , видимо.
Скорее всё же else.
А elif должен быть с условием, а не сам по себе.
(kapa @ Feb 27 2006, в 18:43) писал(а): не вынести за цикл, потому что...
Вынести нужно не вызов, а определение! Ибо оное в цикле не может быть оправдано никакой задачей.
Типа того:
function check () {
#всё что угодно
}
while true; do
check
done
kapa
Сообщения: 143
Сообщение
kapa » 27.02.2006 19:17
спасибо, сделал так:
Код: Выделить всё
if mount_smbfs -I 192.168.1.25 -N -W OFIS //ROOT@STOUN/123 /123 | grep "Operatio
n timed out";# > /dev/null;
then echo "no connection";
sleep 30;
else
/root/refresh_mac_ip;
fi;
}
while true; do
check_kassir
sleep 3;
done
монтирует, но на fi ругается постоянно также
WolfON
Сообщения: 226
Сообщение
WolfON » 28.02.2006 01:08
echo done
попробуй
Arch Linux on AXP2000+/768/ATI R9600XT
Registered Linux User 396336
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current
Сообщение
ddc » 28.02.2006 01:50
kapa
А если убрать ';'?
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2
Сообщение
Shura » 28.02.2006 12:38
у меня было похожее. Возьми условие в скобки.
Rock'n'roll мертв © БГ
Nab
Сообщения: 257
Контактная информация:
Сообщение
Nab » 28.02.2006 16:47
блин, я наверно устарел
ну а если условие-то в квадратные скобки включить?
по правилам....
madskull
Сообщения: 1019
Статус: Экс-металлюга
Контактная информация:
Сообщение
madskull » 28.02.2006 17:00
Никаких скобок не надо.
Но я сомневаюсь, что тот код, который привел kapa вообще работает.
Поскольку нет объявления функции. А раз нет ее, то я склонен подозревать, что мы еще что-то не видим.
Arch Linux / Ice WM
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9
Сообщение
Sparky » 28.02.2006 17:48
madskull писал(а): ↑ 28.02.2006 17:00
Никаких скобок не надо.
Но я сомневаюсь, что тот код, который привел
kapa вообще работает.
Поскольку нет объявления функции. А раз нет ее, то я склонен подозревать, что мы еще что-то не видим.
Я так понимаю он вот так вот объявляет какраз:
Код: Выделить всё
check_kassir() {
if mount_smbfs -I 192.168.1.25 -N -W OFIS //ROOT@STOUN/123 /123 | grep "Operatio
n timed out" > /dev/null;
then sleep 300;
elif
/root/refresh_mac_ip;
exit }
Тоесть должно быть что то вроде этого:
Код: Выделить всё
#!/bin/bash
function check_kassir() {
if mount_smbfs -I 192.168.1.25 -N -W OFIS //ROOT@STOUN/123 /123 | grep "Operatio
n timed out" > /dev/null; // что вернет эта строка if?
then sleep 300;
elif
/root/refresh_mac_ip;
exit
}
while ....
Блог
--------------------
GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
kapa
Сообщения: 143
Сообщение
kapa » 28.02.2006 18:46
ещё раз всем спасибо, к сожалению, сегодня не мог попробовать что-то изменить - постараюсь завтра и обязательно отпишусь
2 madskull:
прошу прощения, в своём ответе - верх случайно обрезал...
сделал всё как советовал JaGoTerr