Zmiana zawarto
Zmiana zawartości pliku
Witam!
Jak zrobić skrypt w bashu który zmieni mi wybraną linijkę w wybranym pliku?
Planuję zrobić skrypt do szybkiej zmiany ip... ale nie wiem jak zmienić wybraną linie...:/
Druga sprawa właściwie nie dotyczy basha ale nie będe zakładał nowego tematu...ustawie nowe ip w /etc/network/interfaces i zapisuje a ciągle internet działa na starym ip dopiero po przeładowaniu kompa internet działa na nowym ip... Domyślam się że chodzi o restart wybranej usługi - jakiej dokładnie i jak to zrobić w bashu?
Z góry dzięki za odpowiedzi!
Jak zrobić skrypt w bashu który zmieni mi wybraną linijkę w wybranym pliku?
Planuję zrobić skrypt do szybkiej zmiany ip... ale nie wiem jak zmienić wybraną linie...:/
Druga sprawa właściwie nie dotyczy basha ale nie będe zakładał nowego tematu...ustawie nowe ip w /etc/network/interfaces i zapisuje a ciągle internet działa na starym ip dopiero po przeładowaniu kompa internet działa na nowym ip... Domyślam się że chodzi o restart wybranej usługi - jakiej dokładnie i jak to zrobić w bashu?
Z góry dzięki za odpowiedzi!
Sniff pisze:Druga sprawa właściwie nie dotyczy basha ale nie będe zakładał nowego tematu...ustawie nowe ip w /etc/network/interfaces i zapisuje a ciągle internet działa na starym ip dopiero po przeładowaniu kompa internet działa na nowym ip... Domyślam się że chodzi o restart wybranej usługi - jakiej dokładnie i jak to zrobić w bashu?
Kod: Zaznacz cały
/etc/init.d/networking
zainteresuj się poleceniem tr, ale nie jestem pewien czy ono zmienia tylko pojedyńcze znaki, czy też całe ciągi znaków.
więc przeczytaj manual:
aloha
więc przeczytaj manual:
Kod: Zaznacz cały
man tr
aloha
Re: Zmiana zawartości pliku
Niestety podałeś zbyt mało informacji (a raczej wcale) bym mógł udzielić szczegółowej informacji.Sniff pisze:Jak zrobić skrypt w bashu który zmieni mi wybraną linijkę w wybranym pliku?
W każdym razie zainteresuj się sedem
Tutaj : LINK
podałem rozwiązanie prawie identycznego problemu, więc myślę, że powinno Cię to bezproblemowo nakierować na właściwy kierunek.
Pozdrawiam
Re: Zmiana zawartości pliku
Są dwa narzędzia do obróbki tekstu w sposób, o którym myślisz (chyba, jeśli dobrze rozumiem ;-)), oba nietrywialne: nawk i sed; sporo czytania... ale się daje :-).Sniff pisze:Witam!
Jak zrobić skrypt w bashu który zmieni mi wybraną linijkę w wybranym pliku?
(...) Z góry dzięki za odpowiedzi!
Pozdrawiam i życzę powodzenia
Jako, że @Sniff zwrócił się do mnie via PW, to pozwolę zamieścić sobie tutaj jeden ze sposobów na rozwiązanie Jego problemu - po prostu nie lubię gdy jakieś informacje nikną przesyłane poza tematem
Krótki cytat z Jego opisem sytuacji:
Napiszę pokrótce o co chodzi i jak się to robi, a Ty już sam to dopasuj do swojego skryptu ...
Jeśli w pliku /etc/network/interfaces chcesz zmienić linię: address 80.48.85.132
na zawierającą inny adres IP, to można to zrobić bardzo prosto.
Skoro nowe IP jest pobierane przez jakiś Twój skrypt, to sądzę że zostaje w nim przypisane jakiejś zmiennej - przyjmijmy tutaj że jej nazwa to "$nowe_ip"
w takim wypadku wystarczy potem tylko:
Krótki cytat z Jego opisem sytuacji:
No więc z mojej strony tak na szybko:Sniff pisze:No więc mam zamiar zrobić tak:
odpalam skrypt który pyta mnie jakie ip chce sobie ustawić
wpisuje to ip po czym naciskam enter
Ip jest wpisywane w plik etc/network/interfaces w miejsce Adress
[/size]Kod: Zaznacz cały
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 80.48.85.132 netmask 255.255.255.0 network 80.48.85.0 broadcast 80.48.85.255 gateway 80.48.85.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 194.204.159.1 194.204.152.34
Po czym restartowana jest usługa /etc/init.d/networking.
Wiem co jak zrobić tylko zostaje kwestia tego jak zmienić to ip w pliku, tego nie kumam. Jeśli możesz pomóż ale nie chciałbym żebyś po prostu napisał skrypt ale zależy mi na tym żebym wiedział o co w nim chodzi. Z góry wielkie dzięki
Napiszę pokrótce o co chodzi i jak się to robi, a Ty już sam to dopasuj do swojego skryptu ...
Jeśli w pliku /etc/network/interfaces chcesz zmienić linię: address 80.48.85.132
na zawierającą inny adres IP, to można to zrobić bardzo prosto.
Skoro nowe IP jest pobierane przez jakiś Twój skrypt, to sądzę że zostaje w nim przypisane jakiejś zmiennej - przyjmijmy tutaj że jej nazwa to "$nowe_ip"
w takim wypadku wystarczy potem tylko:
Kod: Zaznacz cały
sed '/address/{s/[[:digit:].]//g]
A teraz krótko jak to działa ...
używamy seda do pracy, więc polecenie z grubsza jest takie :
sed '<polecenia_seda>' plik_do_obróbki > nowy plik
w tym
sed '/address/{s/[[:digit:].]//g;s/address/address\ '$nowe_ip'/}'
wypadku polecenia seda robią po kolei :
[quote]sed '[color=darkred][b]/address/{s/[[:digit:].]//g[/b][/color];s/address/address\ '$nowe_ip'/}'[/quote]
znajdź linię zawierającą słowo "address" i tylko w tej linii usuń z niej wszystkie cyfry i kropki
następnie:[quote]sed '/address/{s/[[:digit:].]//g;[color=darkred][b]s/address/address\ '$nowe_ip'/[/b][/color]}'[/quote]
nadal w tej samej linii po usunięciu znaków jak wyżej zamień pozostałe słowo "address "
na "address <nowe IP>"
Jako <nowe IP> zostanie wpisana wartość zmiennej $nowe_ip.
Całość na koniec jest zapisywana do nowego pliku
> /etc/network/interfaces.new
i w końcu stary plik /etc/network/interfaces
jest zamieniany przez nowy.
[b][u]Uwaga:[/u][/b]
pod żadnym pozorem nie wolno od razu kierować wyniku do > /etc/network/interfaces
gdyż wykasuje Ci to jego całą zawartość przed zakończeniem operacji.
[u][b]Teraz małe info dodatkowe:[/b][/u]
Podany sposób jest dobry w przypadku gdy w pliku jest konfiguracja tylko jednego interfejsu.
W sytuacji gdy jest ich >1 należy wyszukiwanie linii oprzeć na aktualnym adresie IP, a nie na wyrazie "address"
Pozdrawiam
dokładnie jak napisał Hagal skrypt podmienia w odpowiednim miejscu co trzeba i jest ok jednak ifconfig wyświetla ciągle stare ip:/ no i nie ma netu:/ skrypt wygląda tak:
Czy napewno wystarczy zmienić ip w tym pliku i zrestartować tylko ta usługe? nie kumam tego bo nie mam www a ping na serwer mojej sieci leci... dopiero po restarcie śmiga jak trzeba...
Kod: Zaznacz cały
#!/bin/bash
echo "Wpisz nowe ip:"
read nowe_ip
sed '/address/{s/[[:digit:].]//g;s/address/address\ '$nowe_ip'/}' /etc/network/interfaces > /etc/network/interfaces.new
mv -f /etc/network/interfaces.new /etc/network/interfaces
/etc/init.d/networking restart
ifconfig eth0 up
echo "Ip zostało zmienione na $nowe_ip"
Spróbuj zamiast
Dać takie coś:Sniff pisze:/etc/init.d/networking restart
ifconfig eth0 up
Kod: Zaznacz cały
ifdown eth0
ifup eth0
Odkopuję dość stary temat, ale mam pytanko a nie widzę sensu zakładać nowego.
Kombinuję z diodą led wifi w moim laptopie, zauważyłem że zmiana wartości w pliku /sys/devices/platform/asus-laptop/wlan z 0 na 1 zapala diodę.
Mam pytanie czy istnieje możliwość w network managerze powiadomienia że:poprzez opcje ,,Execute'', a program który to wykonałby skrypt zmieniający wartość z 0 na 1 i odwrotnie dla:
Kombinuję z diodą led wifi w moim laptopie, zauważyłem że zmiana wartości w pliku /sys/devices/platform/asus-laptop/wlan z 0 na 1 zapala diodę.
Mam pytanie czy istnieje możliwość w network managerze powiadomienia że:
Kod: Zaznacz cały
NetworkManager is connected
Kod: Zaznacz cały
NetworkManager is disconnected