LINUX.ORG.RU

Правка скрипта на bash


0

0

Здравствуйте! Необходимо срочно подправить код! Есть скрипт на 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

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


Код последней выполненной команды хранится в переменной ?.
Так что if [ $? != 0 ]; then echo pipetz; else echo ok;fi

gaa ★★
()
Ответ на: комментарий от gaa

я еще совсем не понимаю этот bash, в переменная pipetz в данном случае представляет из себя исполняемый код исходного bash-скрипта? типа рекурсия получается? можно посмотреть полный текст скрипта?

Jaivan
() автор топика
Ответ на: комментарий от Jaivan

переменная "?" хранит статус исполнения последней команды, если ?==0
тогда все супер, команда отработала правильно, иначе завершилась с
кодом ошибки равное "?":
if [ $? != 0 ]; then echo "команда завершилась с ошибкой"; else echo "команда завершилась с кодом 0, все норм";fi

vadv ★★
()
Ответ на: комментарий от vadv

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

Jaivan
() автор топика
Ответ на: комментарий от Jaivan

> я еще совсем не понимаю этот bash, в переменная pipetz в данном случае представляет из себя исполняемый код исходного bash-скрипта?

Нет, это текстовый аргумент для команды echo.

gaa ★★
()
Ответ на: комментарий от Jaivan

> это я уже понял, но мне надо чтобы в коде скрипта сразу же создавались другие роуты, это возможно сделать и как, если да?

Поставь в соответствующей ветке if-а вызов команды route с нужными параметрами.

Всё мы тебе разжёвывать не будем, надо и свой межушный нервный узел иметь.

gaa ★★
()
Ответ на: комментарий от SANTA_CLAUS

конечный скрипт как я понимаю должен выглядеть так:
#!/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

Jaivan
() автор топика
Ответ на: комментарий от SANTA_CLAUS

если честно ламмер я пока еще, только начал читать литературу, которую посоветовали, предполагаю такой конечный вариант:

#!/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
else; then
exit 1
fi

правильно понял намек в вашем сообщении? )))

Jaivan
() автор топика
Ответ на: комментарий от Jaivan

вообще на другом форуме сказали, что это работать не будет, якобы возвращяемое командой значение и функцией - это разные вещи, возникает вопрос, а так: (?)

#!/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

Jaivan
() автор топика
Ответ на: комментарий от Jaivan

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

echo "deleting and updating routes"
.....
route1(){
ip route add default scope .... && ip route add default .... && ip route add .....
}
route2(){
route add default blabla
route add default blabla
}
route1
if [ $? -ne 0 ]; then
route2
fi

SANTA_CLAUS ★★
()
Ответ на: комментарий от SANTA_CLAUS

Ну еще после вызова route2 нужно желательно снова почистить все ненужные маршруты (ибо у тебя в функции route1 могут выполнится некоторые "роутинги") :)

SANTA_CLAUS ★★
()
Ответ на: комментарий от SANTA_CLAUS

не понятно только одно, вот эта конструкция:
ip route add default scope .... && ip route add default .... && ip route add .....

мне же надо чтобы

<команда 1>&&<команда 2>&&<команда 3>&&

команды 2 и 3 в случае неудачного выполнения команды 1 выполнялись, а тут они подряд будут идти, да еще повторяться, если одна из них не выполнена (или последняя?), собственно вот...

Jaivan
() автор топика
Ответ на: комментарий от Jaivan

ну пишешь в route1 свою одну коману
а в route2 две других через &&
я в route1 привел пример с 3 правилами думая что тебе нужно выполнить три роутинга... и если один из них не получится, то пишем другие роутинги.
Если тока одна команда у тебя должна проверяться, то можно вообще без функций обойтись, просто пишешь
if ! ip route add ....
then
route add default ...
route add default ...
fi

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