Есть скриптик. Цель когда пропадает тунель запускатьдругие скрипты. И вот уже часа два не могу его дописать. Гляньте какую галочку я забываю?#!/bin/sh
tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
if [ $tun = $tun_true ] ; then
echo "Ok"
fiвыдаёт
[: 192.1681.130.2: unexpected operatorКак правильно?
>Есть скриптик. Цель когда пропадает тунель запускатьдругие скрипты. И вот уже часа
>два не могу его дописать. Гляньте какую галочку я забываю?
>
>#!/bin/sh
#!/bin/sh -xv
>tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
>tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
>if [ $tun = $tun_true ] ; then
>echo "Ok"
>fi
>
>выдаёт
>[: 192.1681.130.2: unexpected operator
>
>Как правильно?
запуск сктипта ./script.sh 2>&1 | more
Не понял что ты имел ввиду?
>>Есть скриптик. Цель когда пропадает тунель запускатьдругие скрипты. И вот уже часа
>>два не могу его дописать. Гляньте какую галочку я забываю?
>>
>>#!/bin/sh
>>#!/bin/sh -xv
>>tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
>>tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
>>if [ $tun = $tun_true ] ; then
>>echo "Ok"
>>fi
>>
>>выдаёт
>>[: 192.1681.130.2: unexpected operator
>>
>>Как правильно?
#!/bin/sh -xv
запуск сктипта ./script.sh 2>&1 | more
покажет на экране каждую строчку выполнения скрипта
увидишь где ошибка
>Как правильно?if [ "$tun" = "$tun_true" ]; then
Вот так будет правильно.
RTFM.
#!/bin/sh
tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
echo $tun
echo $tun_true
if [ "$tun" = "$tun_true" ] ; then
echo "Ok"
else
echo "Fuck"
fiПолучил
inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00
inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00
FuckВот :(
>Вот :(if test "$tun" = "$tun_true"; then
А так попробуй. ;)
Все одно - RTFM!
>Есть скриптик. Цель когда пропадает тунель запускатьдругие скрипты. И вот уже часа
>два не могу его дописать. Гляньте какую галочку я забываю?
>
>#!/bin/sh
>tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
>tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
>if [ $tun = $tun_true ] ; then
>echo "Ok"
>fi
>
>выдаёт
>[: 192.1681.130.2: unexpected operator
>
>Как правильно?попробуй
if $tun == $tun_true; thenа вообще, имхо, не лучший способ определять падение канала... но сойдет...
Оба способа не канают.
В первом при if test "$tun" = "$tun_true"; then
Получаю Fuck
Во втором
inet: not found.
Fuck
>Оба способа не канают.
>В первом при if test "$tun" = "$tun_true"; then
>Получаю Fuck
>Во втором
>inet: not found.
>Fuck
а откуда фраза "inet: not found."?я еще одну вещь проглядел - надо точку с запятой поставить после обоих echo внутри if-а
т.е. примерно так:
if test "$tun" = "$tun_true"; then
echo OK;
else
echo BAD;
fi
>>Оба способа не канают.
>>В первом при if test "$tun" = "$tun_true"; then
>>Получаю Fuck
>>Во втором
>>inet: not found.
>>Fuck
>а откуда фраза "inet: not found."?
Да фиг её знает такое впечатление что он переменные в нутри if воспринимал как команды сшела.
>
>я еще одну вещь проглядел - надо точку с запятой поставить после
>обоих echo внутри if-а
>т.е. примерно так:
>if test "$tun" = "$tun_true"; then
> echo OK;
>else
> echo BAD;
>fi
>
>а вообще, имхо, не лучший способ определять падение канала... но сойдет...А как лучше, грамотней. Мне просто в голову только этот способ пришел.
Такое впечатление что, что то с пробелами в переменных. Ибо так прокатило.#!/bin/sh
tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1" | awk '{print $2}'`
tun_true="192.168.130.2"
echo "$tun"
echo "$tun_true"
if test "$tun" = "$tun_true" ; then
echo "Ok"
else
echo "Fuck"
fi
>А как лучше, грамотней. Мне просто в голову только этот способ пришел.
я проверяю простым пингом
вот такой скрипт у меня дает данные в mrtg для графика работоспособности канала и инернета вообще:
if ping -c 1 -I eth1 -w 1 $1 > /dev/null; then
echo "1000";
else
echo "0";
fi
if ping -c 1 -I eth1 -w 1 $2 > /dev/null; then
echo "1000";
else
echo "0";
fi
/usr/bin/uptime
echo "Internet"в качестве параметров идет адрес шлюза провайдера и адрес какого-нибудь гарантированно работающего хоста в интернете типа mail.ru
>>А как лучше, грамотней. Мне просто в голову только этот способ пришел.
>я проверяю простым пингом
>вот такой скрипт у меня дает данные в mrtg для графика работоспособности
>канала и инернета вообще:
>if ping -c 1 -I eth1 -w 1 $1 > /dev/null; then
> echo "1000";
>else
> echo "0";
>fi
>if ping -c 1 -I eth1 -w 1 $2 > /dev/null; then
> echo "1000";
>else
> echo "0";
>fi
>/usr/bin/uptime
>echo "Internet"
>
>в качестве параметров идет адрес шлюза провайдера и адрес какого-нибудь гарантированно работающего
>хоста в интернете типа mail.ru
вариант неплохой но у меня несколько маршрутов, поэтому если один тунель лег то ping всёравно пройдёт
вы гоните!!!!!
у вас строки не ИДЕНТИЧНЫЕ! как вы их сравнивать собираетесь?#!/bin/sh
tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
if [ $tun = $tun_true ] ; then
echo "Ok"
fiможет проще ?!
#!/bin/sh
tun_res=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
res=`echo $?`if [ $res -ne 0 ];then
echo "tun DOWN" # or run other command
fi
>вы гоните!!!!!
>у вас строки не ИДЕНТИЧНЫЕ! как вы их сравнивать собираетесь?
>
В итоге я пришёл к тому же выводу, потому и сделал так
tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1" | awk '{print $2}'`
вот только почему они различные не понимаю>#!/bin/sh
>tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
>tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
>if [ $tun = $tun_true ] ; then
>echo "Ok"
>fi
>
>может проще ?!
>#!/bin/sh
>tun_res=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
>res=`echo $?`
>
>if [ $res -ne 0 ];then
>echo "tun DOWN" # or run other command
>fi
>вариант неплохой но у меня несколько маршрутов, поэтому если один тунель лег
>то ping всёравно пройдёт
но ведь я же указываю конкретный интерфейс для пинга...
что мешает сделать копии этого скрипта для всех интерфейсов?
>>вариант неплохой но у меня несколько маршрутов, поэтому если один тунель лег
>>то ping всёравно пройдёт
>но ведь я же указываю конкретный интерфейс для пинга...
>что мешает сделать копии этого скрипта для всех интерфейсов?
Да вариант хороший но не для моего случая. Тот же фаервол.
>if [ $tun = $tun_true ] ; then>выдаёт
>[: 192.1681.130.2: unexpected operator
>
>Как правильно?$tun и $tun_true необходимо, так сказать, "отквотить".
>>if [ $tun = $tun_true ] ; then
>
>>выдаёт
>>[: 192.1681.130.2: unexpected operator
>>
>>Как правильно?
>
>$tun и $tun_true необходимо, так сказать, "отквотить".А поподробней нельзя, так на будущее чтоб знать.
Попробуй так:#!/bin/sh
tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1" | /usr/bin/tr '\t' ' ' | /usr/bin/sed 's/^ *//g'`
tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
if [ "$tun" = "$tun_true" ] ; then
echo "Ok"
fi
>Есть скриптик. Цель когда пропадает тунель запускатьдругие скрипты. И вот уже часа
>два не могу его дописать. Гляньте какую галочку я забываю?
>
>#!/bin/sh
>tun=`/sbin/ifconfig -a | /usr/bin/grep "192.168.130.1"`
>tun_true="inet 192.168.130.2 --> 192.168.130.1 netmask 0xffffff00"
>if [ $tun = $tun_true ] ; then
>echo "Ok"
>fi
>
>выдаёт
>[: 192.1681.130.2: unexpected operator
>
>Как правильно?