Bash, prosze o pomoc (ipsec, grep, sed)

0

Hej Koledzy, potrzebuje pomocy z bashem.

W sieci chcemy korzystać z ipsec, (wizanie ip&mac) niestety program nie pozwala na dyamiczne wiaznie, za kazda zmiana nalezy tworzyc nowa tablice i podmieniac ja za stara.

Wpadłem na pomysł, by oprzec tworzenie o zapis do pliku w postaci

do skryptu wstrzykujemy dane wejściowe IP%MAC
następnie skrypt:

  1. sprawdza czy takie IP%MAC wiązanie istniej
  2. Jeśli istnieje oznacza ze nie musi przeładowywać ipsec i kończymy skrypt
  3. Jeśli nie istnieje wiązanie IP%MAC:
    -Szukamy czy istnieje sam adres IP%, ponieważ nie może istnieć w tabeli dwa wpisy dla jednego ip,
    • jeżeli znaleźliśmy, wiemy ktora to linia dzieki (grep -n) podstawiamy nowa linie w miejsce starej
    • jeżeli nie znaleźliśmy IP% wtedy dodajemy na koniec pliku nowa linie z wpisem

o ile w delphi napisanie takie kodu zajęłoby mi 30 sek o tyle w bashu jest dla mnie ciężej, gdyż rzadko z niego korzystam, a teraz muszę wprowadzić obsługę ipsec..

plik na który będziemy operować ma takie wartości

/etc/ipmac

ipset -A wpuszczanimac 192.168.0.1%00:01:02:03:05:06
ipset -A wpuszczaniip 192.168.0.1
ipset -A wpuszczanimac 192.168.0.2%07:17:DF:0a:0b:0c
ipset -A wpuszczaniip 192.168.0.2
ipset -A wpuszczanimac 192.168.0.3%07:08:12:DC:0b:5F
ipset -A wpuszczaniip 192.168.0.3

Założenie jest proste:
Chce w bashu zrobić edycje pliku, znaleźć ciąg jeśli istnieje podmienić go na nowy ciąg (w przypadku zmiany mac), a jeśli nie istnieje chce go dodać...

0

przy użyciu google wyskrobałem skrypt który prawie działaa jak chce, ale potrzebuje jeszcze usunac linie zawierające odpowiedni ip

#!/bin/bash

zs_macip=$1

zs_wynik=$(grep -n "$zs_macip" /home/ipmac)

if [ ! $zs_wynik ]; then
zs_wynik="ipsec -A wpuszczanimac $zs_macip"
echo 'nie ma'
echo $zs_wynik >> /home/ipmac
exit
fi

zs_wynik2=${zs_wynik%%:}; //niby ma wyciac liczbe (do znaku:) ale niestety zwraca wynik i przez to nei moge uzyc funkcji sed -i $zs_wynik2 d kasownaia lini


echo $zs_wynik2
0

Szukam polecenia typu grep -n <string> <path_of_file>
Czyli podaje jakiś string on ma wyszukać go w pliku i zwrócić numer wiersza, w którym się znajduje w postaci int.

Wszystko by było fajnie z tym grep'em, ale gdy napisze komendę np
grep -n "domek" /etc/...

to dostaję komunikat:

1:domek

Jakieś pomysły jak to obciąć lub jakieś inne polecenie?

probowalem
zs_wynik2=${zs_wynik%%:};

powyższe polecenie powinno odciąć wszytko aż do pierwszego znaku ":" licząc od tylu, ale nie działa :/ why ?

jakieś porady ?

0

Heja koledzy, wesołych wszystkim :P

Chce wykorzystać grep -n "domek%" /etc/test do wyciągnięcia linii w której tekst się znajduje,

Wszystko działa ok, dostaje wynik chce obciąć liczbę do int
grep -n "domek" /etc/test

zs_wynik=$(grep -n "domek%" /etc/test)
zs_wynik2=${zs_wynik%%:};
echo $zs_wynik2

dostaje wynik
5:domek%

gdzie 5 jest nr linijki

powyższe polecenie powinno mi wyciąć wszytko od tylu do ":" i zwrócić liczbę ale zwraca cały ciąg z powrotem czyli 5:domek%

Jakieś pomysły?

1 użytkowników online, w tym zalogowanych: 0, gości: 1