Jestem początkującym w skryptach bash. Chcę utworzyć skrypt bash, aby zautomatyzować instalację i konfigurację rzeczy na moim Linux-ie.
Załóżmy, że chcę edytować
/etc/yum.repos.d/epel.repo
przez skrypt bash
To, co chcę zrobić, jest następujące
- Otwórz plik /etc/yum.repos.d/epel.repo
- Znajdź sekcję [epel]
- Dodaj priorytet linii = 10 zaraz po włączeniu linii = 1 w sekcji epel
Do pierwszej części dodałem
yum install nano
nano /etc/yum.repos.d/epel.repo
Moje pytanie brzmi: jak zrobić 2 i 3 część za pomocą skryptu bash za pomocą nano (jeśli to możliwe, jeśli nie jest to możliwe, pokaż mi sed)
Również w niektórych punktach będę musiał zmodyfikować zmienne w plikach np
- enable = 0, aby włączyć = 1
- Testowanie = „1” na Testowanie = „0”
- Dodaj tekst w linii. Funkcje = do funkcji = „tekst1”, „tekst2”
- Dodaj tekst do pliku i zapisz go (za pomocą nano)
Wiem, że jest to wymagające, ale muszę to stworzyć dla przyjaciela, który jest noobem w zarządzaniu serwerem. Niestety nie mam czasu na studiowanie skryptów bash od samego początku, gdy moje egzaminy są jak najbliżej. Użyję twoich przykładów do napisania skryptu.
Dzięki chłopaki za wszystkie odpowiedzi, które udało mi się wykonać w większości skrypt bash
Jednak mam inny problem Pozwala Załóżmy, że chcesz zmodyfikować nginx.conf korzystając sed Zajmiemy się worker_processes
Teraz chcę użycie sed wykonać następujące 1.Find do pierwszego wystąpienia z worker_processes
tym, że conf i zamienić tekst zworker_processes 4;
Uwaga specjalna: to tylko przykład. Może się zdarzyć, że conf zawiera proces_procesowy 1; . To trudna część. Chcę polecenia sed, które wyszukuje PIERWSZĄ WHOLE wielkość dopasowania słowa pracownik_procesy , usuwa wiersz tekstu, w którym znajduje się słowo, i wkleja worker_processes 4;
tam, a następnie zapisuje plik. Jest to najbardziej niezawodna metoda, z której korzystałem podczas edytowania plików (bez ryzyka złamania jakiejkolwiek konf
Ostatnia sugestia, której użyłem sed -i 's / enabled = 0 / enabled = 1 / g' /etc/yum.repos.d/remi.repo, aby zmienić włączony = 0 na włączony = 1 w sekcji [remi] w remi .repo. Mam jednak wrażenie, że może zmodyfikować wszystkie włączone = 0 w tym pliku, co spowoduje uszkodzenie serwera. Czy ktoś może zaproponować lepszy kod.
Kolejna sprawa, której nie jestem pewien: PI chcę edytować plik, który ma to jako Test tekstowy = „0” (Tak, ma cytaty i muszę go zachować). Należy zmienić z Testowanie = „0” na Testowanie = ” 1 "(z cytatami)
Również muszę dodać tekst z cudzysłowami na końcu pliku za pomocą sed, np. „Thanks Quanta” (z cytatem) W przypadku php wstawiasz \ z echami, nie wiem jak to zrobić dla bash
Kolejną rzeczą,
którą muszę zmodyfikować wiersz w conf, ale nie pamiętam, co to jest cały tekst do zastąpienia
Jak jego słuchanie = coś; , chcę to zmodyfikować, aby słuchać = /tmp/php5-fpm.sock;
Wielkie kciuki do góry za kwanty
Dzięki za niesamowite wsparcie chłopaki
-i
nie jest standardową opcją dlased
.ed
oferuje jednak zgodny ze standardami sposób edycji plików o składni bardzo podobnej do sed.Jak powiedział Ptman, Augeas może cię uratować przed użyciem
sed
/awk
:ustawi priorytet
epel
repozytorium na 10. Jeślipriority
klucz już istnieje, ustawi jego wartość, w przeciwnym razie dodapriority
wpis po ostatnim wpisie w sekcji.To samo dotyczy innych wartości, które możesz chcieć zmodyfikować.
Jeśli chcesz zmodyfikować kilka wartości, możesz nawet użyć go
augtool
jako interpretera:Jeśli chcesz zachować to w skrypcie bash, możesz potokować polecenia w
augtool
:Zobacz
man augtool
więcej opcji.Istnieje kilka zalet korzystania z Augeas vs
sed
/awk
:yum.repo
składni). Nie będziesz ryzykować zerwania składni pliku, jeśli twoje wyrażenia regularne są niepoprawne;yum.repo
sekcjach, więc wiesz, że edytujesz odpowiednią sekcję;źródło
Możesz także wypróbować Augeas , narzędzie do programowej modyfikacji plików konfiguracyjnych. Jest bardzo wydajny w połączeniu z Puppet (system zarządzania konfiguracją), ale może być również używany samodzielnie.
źródło