URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7878
[ Назад ]

Исходное сообщение
"Правка скрипта на bash"

Отправлено Jaivan , 03-Фев-09 17:00 
Здравствуйте! Необходимо срочно подправить код! Есть скрипт на bash:

#!/bin/sh

#add the default route with equalize mpath echo "deleting and updating routes" while route del default >&- 2>&- ; do :; done ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1

нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой то не отзывается) выполнилась другая команда, т е создавались другие роуты

route add default gw 77.220.58.194 metric 1 route add default gw 85.113.195.196 metric 5

Помогите справиться с поставленной задачей! Заранее спасибо!


Содержание

Сообщения в этом обсуждении
"Правка скрипта на bash"
Отправлено Pahanivo , 03-Фев-09 19:20 
>[оверквотинг удален]
>#add the default route with equalize mpath echo "deleting and updating routes" while route del default >&- 2>&- ; do :; done ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1
>
>нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой
>то не отзывается) выполнилась другая команда, т е создавались другие роуты
>
>
>route add default gw 77.220.58.194 metric 1 route add default gw 85.113.195.196
>metric 5
>
>Помогите справиться с поставленной задачей! Заранее спасибо!

интером пользоватся не умеем? че все в одной строке?


"Правка скрипта на bash"
Отправлено vic , 03-Фев-09 23:21 
>[оверквотинг удален]
>#add the default route with equalize mpath echo "deleting and updating routes" while route del default >&- 2>&- ; do :; done ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1
>
>нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой
>то не отзывается) выполнилась другая команда, т е создавались другие роуты
>
>
>route add default gw 77.220.58.194 metric 1 route add default gw 85.113.195.196
>metric 5
>
>Помогите справиться с поставленной задачей! Заранее спасибо!

Определись каким образом производится детект ошибки. Будет ли это возвращаемое значение (статус)последней команды(утилиты) или же сообщение на stderr. Далее надеюсь понятно что надо просто выполнить проверку и запустить другую команду?


"Правка скрипта на bash"
Отправлено Jaivan , 04-Фев-09 10:21 
>[оверквотинг удален]
>>
>>
>>route add default gw 77.220.58.194 metric 1 route add default gw 85.113.195.196
>>metric 5
>>
>>Помогите справиться с поставленной задачей! Заранее спасибо!
>
>Определись каким образом производится детект ошибки. Будет ли это возвращаемое значение (статус)последней
>команды(утилиты) или же сообщение на stderr. Далее надеюсь понятно что надо
>просто выполнить проверку и запустить другую команду?

надеюсь, что нечто подобное заработает:

#!/bin/sh

#add the default route with equalize mpath
echo "deleting and updating routes"
while route del default >&- 2>&-
do
:
done
route_1(){
ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1
}
route_2(){
route add default gw 77.220.58.194 metric 1
route add default gw 85.113.195.196 metric 5
}
route_1
if [ $?!=0 ]; then
route_2
fi
ps вынес на суд... )


"Правка скрипта на bash"
Отправлено Pahanivo , 04-Фев-09 12:09 
>[оверквотинг удален]
>}
>route_2(){
>route add default gw 77.220.58.194 metric 1
>route add default gw 85.113.195.196 metric 5
>}
>route_1
>if [ $?!=0 ]; then
>route_2
>fi
>ps вынес на суд... )

работать не будет - возвращеямое команлой значение и фунцией - это разные вещи


"Правка скрипта на bash"
Отправлено Jaivan , 04-Фев-09 12:35 
>[оверквотинг удален]
>>route add default gw 85.113.195.196 metric 5
>>}
>>route_1
>>if [ $?!=0 ]; then
>>route_2
>>fi
>>ps вынес на суд... )
>
>работать не будет - возвращеямое команлой значение и фунцией - это разные
>вещи

#!/bin/sh

#add the default route with equalize mpath
echo "deleting and updating routes"
while route del default >&- 2>&-
do
:
done
ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1
if [ $?!=0 ]; then
route add default gw 77.220.58.194 metric 1
route add default gw 85.113.195.196 metric 5
else; then
exit 1
fi

а так?


"Правка скрипта на bash"
Отправлено Jaivan , 04-Фев-09 12:45 
>[оверквотинг удален]
>>route add default gw 85.113.195.196 metric 5
>>}
>>route_1
>>if [ $?!=0 ]; then
>>route_2
>>fi
>>ps вынес на суд... )
>
>работать не будет - возвращеямое команлой значение и фунцией - это разные
>вещи

и тут сказано совершенно обратное
http://www.opennet.me/docs/RUS/bash_scripting_guide/c3270.ht...


"Правка скрипта на bash"
Отправлено Pahanivo , 04-Фев-09 12:54 
>[оверквотинг удален]
>>>if [ $?!=0 ]; then
>>>route_2
>>>fi
>>>ps вынес на суд... )
>>
>>работать не будет - возвращеямое команлой значение и фунцией - это разные
>>вещи
>
>и тут сказано совершенно обратное
>http://www.opennet.me/docs/RUS/bash_scripting_guide/c3270.ht...

да ну? ))
Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды.
извините но если у вас в функции 10 команд и только последняя вернула 0, а вы проверяете только результат функции - это по вашему правильно?
попробуйте хотябы команды в выде последовательности давать типа:
cmd1 && cmd2 && cmd3 и тд


"Правка скрипта на bash"
Отправлено Jaivan , 04-Фев-09 13:00 
>[оверквотинг удален]
>
>да ну? ))
>Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая
>код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней
>команды.
>извините но если у вас в функции 10 команд и только последняя
>вернула 0, а вы проверяете только результат функции - это по
>вашему правильно?
>попробуйте хотябы команды в выде последовательности давать типа:
>cmd1 && cmd2 && cmd3 и тд

понял, а как насчет последней реализации?
я так понимаю
ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1
это одна по сути команда (с подкомандами внутри), соответственно должно прокатить...



"Правка скрипта на bash"
Отправлено vic , 04-Фев-09 17:49 
>понял, а как насчет последней реализации?
>я так понимаю
>ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight
>4 nexthop via 85.113.195.196 dev ppp1 weight 1
>это одна по сути команда (с подкомандами внутри), соответственно должно прокатить...

прокатывает обычно в военкомате :)
а в скриптах либо работает либо нет :)
в данном случае ip это команда с множеством параметров и проверка [ $? != 0 ] поставленная сразу после этой строки вернет результат ее (ip) выполнения, т.е. :


ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight 4 nexthop via 85.113.195.196 dev ppp1 weight 1
if [ $? != 0 ] ; then
   # тут обработка ошибки как вам надо
fi

норм решение


"Правка скрипта на bash"
Отправлено Jaivan , 05-Фев-09 09:44 
>[оверквотинг удален]
>$? != 0 ] поставленная сразу после этой строки вернет результат
>ее (ip) выполнения, т.е. :
>
 
>ip route add default scope global nexthop via 77.220.58.194 dev ppp0 weight
>4 nexthop via 85.113.195.196 dev ppp1 weight 1
>if [ $? != 0 ] ; then
>   # тут обработка ошибки как вам надо
>fi
>

>норм решение

большое спасибо, заказчик молчит - значит все в порядке )))



"продолжим? не останавливайтесь"
Отправлено Andrey Mitrofanov , 05-Фев-09 10:20 
>нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой
>то не отзывается) выполнилась другая команда, т е создавались другие роуты

"Если не отзывается гейтвей" и "ruote вернул ненулевой RC" -- две большие разницы.

А заказчик молчит потому, что баран. И Вы его ввели в заблуждение.

Предлагаю продолжить нашу "Санта-Барбару".


"продолжим? не останавливайтесь"
Отправлено Jaivan , 05-Фев-09 14:54 
>>нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой
>>то не отзывается) выполнилась другая команда, т е создавались другие роуты
>
>"Если не отзывается гейтвей" и "ruote вернул ненулевой RC" -- две большие
>разницы.
>
>А заказчик молчит потому, что баран. И Вы его ввели в заблуждение.
>
>
>Предлагаю продолжить нашу "Санта-Барбару".

Вы можете растолковать, что это выражение значит вообще:
>&- 2>&-


"продолжим? не останавливайтесь"
Отправлено Andrey Mitrofanov , 05-Фев-09 16:09 
>Вы можете растолковать,

Не-а, не могу. А оно мне надо?...

> что это выражение значит вообще:
>>&- 2>&-

Closing File Descriptors

n<&-
    Close input file descriptor n.

0<&-, <&-
    Close stdin.

n>&-
    Close output file descriptor n.

1>&-, >&-
    Close stdout.

http:/docs/RUS/bash_scripting_guide/c11620.html