Strona 1 z 2
Zmiana zawartości pliku
: 15 kwietnia 2007, 18:28
autor: Sniff
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!
: 15 kwietnia 2007, 18:46
autor: velmafia
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?
: 15 kwietnia 2007, 19:48
autor: Sniff
Ok dzięki...pozostaje tylko jak zmienić zawartość pliku:/
: 15 kwietnia 2007, 19:58
autor: velmafia
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
Re: Zmiana zawartości pliku
: 15 kwietnia 2007, 23:27
autor: Gość
Sniff pisze:Jak zrobić skrypt w bashu który zmieni mi wybraną linijkę w wybranym pliku?
Niestety podałeś zbyt mało informacji (a raczej wcale) bym mógł udzielić szczegółowej informacji.
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
: 16 kwietnia 2007, 15:56
autor: wojtekz_
Sniff pisze:Witam!
Jak zrobić skrypt w bashu który zmieni mi wybraną linijkę w wybranym pliku?
(...) Z góry dzięki za odpowiedzi!
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 :-).
Pozdrawiam i życzę powodzenia
: 16 kwietnia 2007, 19:10
autor: Gość
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:
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
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
[/size]
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
No więc z mojej strony tak na szybko:
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
: 17 kwietnia 2007, 07:39
autor: Sniff
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:
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"
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...
: 17 kwietnia 2007, 14:43
autor: mlyczek
Spróbuj zamiast
Sniff pisze:/etc/init.d/networking restart
ifconfig eth0 up
Dać takie coś:
: 28 sierpnia 2009, 00:32
autor: Robin
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: