[+] bash - porównanie ci

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

[+] bash - porównanie ciągu znaków

Post 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:

Kod: Zaznacz cały

if [[ "$RS" = '192.168.1.1' ]]; then
Jak jest równe ma wykonać opcję ,,exit'' jak różne, żeby szło dalej do ,,else''.
Jak to ogarnąć?
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post 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
??
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post 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ę.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Operatorem porównania w bashu jest podwójny znak równości ('==') a nie pojedynczy ('=').
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post 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.
ODPOWIEDZ