Strona 1 z 1
[+] bash - porównanie ciągu znaków
: 31 stycznia 2012, 11:54
autor: markossx
Utknąłem w jednym miejscu, może ktoś doradzi, otóż:
Wyciągam IP:
Kod: Zaznacz cały
RS=$(ip r s | grep default | awk '{ print $3 }')
Wynik mam: 192.168.1.2
Następnie chcę porównać ten wynik w następujący sposób:
Jak jest równe ma wykonać opcję ,,exit'' jak różne, żeby szło dalej do ,,else''.
Jak to ogarnąć?
: 31 stycznia 2012, 12:11
autor: Unit
Tzn coś takiego:
Kod: Zaznacz cały
#!/bin/bash
RS=$(ip r s | grep default | awk '{ print $3 }')
if [[ "$RS" = '192.168.0.254' ]]
then
echo 'OK'; exit 0
else
echo 'NOK'
#tutaj jakieś przetwarzanie
fi
??
: 31 stycznia 2012, 12:22
autor: markossx
Jednak coś dalej nie tak, pokaże początek kodu:
Kod: Zaznacz cały
#!/bin/bash -x
LOG=/tmp/routechck
echo '---------------------------------' >> $LOG
date >> $LOG
RS=$(ip r s | grep default | awk '{ print $3 }')
if ping -c 1 8.8.8.8; then
if [[ "$RS" = '192.168.1.1' ]]; then
exit
fi
else
if ip r s | grep 192.168.1.2; then
ip route del default; ip route add default via 192.168.1.1;
fi
fi
Edycja:
Mimo, że w danym momencie jest ustawione domyślnie na 192.168.1.2 skrypt kończy działanie:
Kod: Zaznacz cały
+ [[ 192.168.110.2 = \1\9\2\.\1\6\8\.\1\1\0\.\1 ]]
Czyli to porównanie zwraca 0 a powinno 1, czyli iść dalej do tego co jest po opcji ,,else''. Chyba, że się mylę.
: 02 lutego 2012, 20:36
autor: lessmian2
Operatorem porównania w bashu jest podwójny znak równości ('==') a nie pojedynczy ('=').
: 03 lutego 2012, 10:42
autor: markossx
Jasne,
lessmain2
Założenie było takie, żeby nagios3 w przypadku wykrycia problemu na łączu 1 zmienił routing na łącze 2, gdy łącze 1 wróci zza światów routing
powinien również wrócić na łącze 1.
Podpiąłem do nagiosa skrypt, który robi właśnie taki myk, działa jak należy, ale wszelkie uwagi mile widziane
Kod: Zaznacz cały
#!/bin/bash
LOG=/tmp/routechck
echo '---------------------------------' >> $LOG
date >> $LOG
DEF=$(ip r s | grep default | awk '{ print $3 }' | cut -c 13) # 1=MX,2=FR
ping -c 1 89.XX.XX.XX
if [ $? == 0 ]; then
echo 'PING 89.XX.XX.XX OK' >> $LOG;
if [ "$DEF" == 2 ]; then
echo FR 2=2 >> $LO;
ip route del default;
ip route add default via 192.168.1.1;
fi
else
echo 'PING 89.XX.XX.XX NOT OK' >> $LOG;
if [ "$DEF" == 1 ]; then
ip route del default;
ip route add default via 192.168.1.2;
fi
fi
Jedynie musiałem nadać bit SUID na program "ip" (nie używam sudo), aby nagios mógł zamieszać w tablicach routingu.