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

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

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

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

gaa ★★ ()
Ответ на: Re: Правка скрипта на bash от gaa

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

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

Jaivan ()
Ответ на: Re: Правка скрипта на bash от Jaivan

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

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

vadv ★★ ()
Ответ на: Re: Правка скрипта на bash от vadv

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

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

Jaivan ()
Ответ на: Re: Правка скрипта на bash от Jaivan

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

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

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

gaa ★★ ()
Ответ на: Re: Правка скрипта на bash от Jaivan

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

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

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

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

gaa ★★ ()

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

google://Advanced Bash Scripting Guide

anonymous ()

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

route_1(){
route add blablablabl
route add balbalbal
}
route_2(){
route add bablalb
route add abweq
}
route_1
if [ $? -ne 0 ]; then
route_2
fi

SANTA_CLAUS ★★ ()
Ответ на: Re: Правка скрипта на bash от SANTA_CLAUS

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

route_1(){
route add blablablabl && return 1
route add balbalbal
}

Это на случай, если самый первый route обломится.

gaa ★★ ()
Ответ на: Re: Правка скрипта на bash от wfrr

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

не, помоему наоборот нужно
route bla && route blalba && route ....
Должны выполнится все route, если один не выполняется, идет $?!=0

SANTA_CLAUS ★★ ()
Ответ на: Re: Правка скрипта на bash от SANTA_CLAUS

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

radws% grep "bla" jj|| echo "2"
grep: jj: No such file or directory
2
radws% grep "bla" jj&& echo "2"
grep: jj: No such file or directory

wfrr ★★☆ ()
Ответ на: Re: Правка скрипта на bash от SANTA_CLAUS

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

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

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

Ну дык в случае с && echo $? = 0 если _все_ операции заверешены успешно, что нужно топикстартеру.

SANTA_CLAUS ★★ ()
Ответ на: Re: Правка скрипта на bash от SANTA_CLAUS

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

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

#!/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 ()
Ответ на: Re: Правка скрипта на bash от Jaivan

Re: Правка скрипта на 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
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 ()
Ответ на: Re: Правка скрипта на bash от Jaivan

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

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

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 ★★ ()
Ответ на: Re: Правка скрипта на bash от SANTA_CLAUS

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

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

SANTA_CLAUS ★★ ()
Ответ на: Re: Правка скрипта на bash от SANTA_CLAUS

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

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

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

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

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

Jaivan ()
Ответ на: Re: Правка скрипта на bash от Jaivan

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

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

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