Здравствуйте! Необходимо срочно подправить код! Есть скрипт на 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
Помогите справиться с поставленной задачей! Заранее спасибо!
>[оверквотинг удален]
>#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
>
>Помогите справиться с поставленной задачей! Заранее спасибо!интером пользоватся не умеем? че все в одной строке?
>[оверквотинг удален]
>#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. Далее надеюсь понятно что надо просто выполнить проверку и запустить другую команду?
>[оверквотинг удален]
>>
>>
>>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 вынес на суд... )
>[оверквотинг удален]
>}
>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 вынес на суд... )работать не будет - возвращеямое команлой значение и фунцией - это разные вещи
>[оверквотинг удален]
>>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а так?
>[оверквотинг удален]
>>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...
>[оверквотинг удален]
>>>if [ $?!=0 ]; then
>>>route_2
>>>fi
>>>ps вынес на суд... )
>>
>>работать не будет - возвращеямое команлой значение и фунцией - это разные
>>вещи
>
>и тут сказано совершенно обратное
>http://www.opennet.me/docs/RUS/bash_scripting_guide/c3270.ht...да ну? ))
Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней команды.
извините но если у вас в функции 10 команд и только последняя вернула 0, а вы проверяете только результат функции - это по вашему правильно?
попробуйте хотябы команды в выде последовательности давать типа:
cmd1 && cmd2 && cmd3 и тд
>[оверквотинг удален]
>
>да ну? ))
>Аналогичным образом ведут себя функции, расположенные внутри сценария, и сам сценарий, возвращая
>код завершения. Код, возвращаемый функцией или сценарием, определяется кодом возврата последней
>команды.
>извините но если у вас в функции 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
это одна по сути команда (с подкомандами внутри), соответственно должно прокатить...
>понял, а как насчет последней реализации?
>я так понимаю
>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
норм решение
>[оверквотинг удален]
>$? != 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
>
>норм решениебольшое спасибо, заказчик молчит - значит все в порядке )))
>нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой
>то не отзывается) выполнилась другая команда, т е создавались другие роуты"Если не отзывается гейтвей" и "ruote вернул ненулевой RC" -- две большие разницы.
А заказчик молчит потому, что баран. И Вы его ввели в заблуждение.
Предлагаю продолжить нашу "Санта-Барбару".
>>нужно, чтобы если при выполнении последней команды произошла ошибка (например гетвей какой
>>то не отзывается) выполнилась другая команда, т е создавались другие роуты
>
>"Если не отзывается гейтвей" и "ruote вернул ненулевой RC" -- две большие
>разницы.
>
>А заказчик молчит потому, что баран. И Вы его ввели в заблуждение.
>
>
>Предлагаю продолжить нашу "Санта-Барбару".Вы можете растолковать, что это выражение значит вообще:
>&- 2>&-
>Вы можете растолковать,Не-а, не могу. А оно мне надо?...
> что это выражение значит вообще:
>>&- 2>&-Closing File Descriptors
n<&-
Close input file descriptor n.0<&-, <&-
Close stdin.n>&-
Close output file descriptor n.1>&-, >&-
Close stdout.