Automatyzacja zadań. Skrypty powłoki bash/powłoki systemowej UNIX.

Niejednokrotnie w pracy czy też w domu skupiamy swoje aktywności przed komputerami. Wiele z naszych zadań to monotonna, często powtarzalna praca. W kółko wykonujemy kilka, kilkadziesiąt, a nawet kilkaset kliknięć w krótkim czasie lub „klepiemy” te same komendy w terminalu. Zdarza się, że nawet ręcznie kopiujemy i wklejamy powtarzające się sekwencje. Tak nie może być, przecież to ogromna strata czasu!

A co, gdybyśmy mogli nasze kroki zautomatyzować? Wystarczy przecież napisać raz automat, który wykonywałby pracę za nas lub chociaż ją przyspieszał. Idealnym rozwiązaniem w takim przypadku są skrypty powłoki bash, czyli powłoki systemowej UNIX.

Czym są skrypty powłoki bash?

Skrypty powłoki bash to nic innego jak zwykłe pliki tekstowe, które wielu z nas na co dzień użytkuje. W pierwszej linii mają specjalny zapis wskazujący na to, jakiej powłoki będzie ten skrypt używał. Wszystko, co znajduje się poniżej tego zapisu, to komendy, które będą wykonywały wpisane przez nas komendy z góry na dół. Takie rozwiązanie umożliwia zastosowanie bardzo złożonego zadania za pomocą tylko jednej komendy.

Zastosowanie skryptów bashowych

Skrypty bashowe mają tak szerokie zastosowanie, jak gama komend powłoki bash. Możemy nimi zrobić dosłownie wszystko! Poniżej kilka przykładów, do czego możemy je wykorzystać.

W terminalu mamy niezliczoną liczbę komend, odpowiedzialnych za operacje wykonywane na plikach czy katalogach. Umożliwia nam to w konsekwencji możliwość stosowania ich również w skryptach bash. Zamiast wykonywać tę samą operację na liście 1000 plików, możemy skorzystać z prostego skryptu, który zrobi to za nas – oto przykłady operacji, jakie możemy wykonać na plikach lub katalogach:

  • zamiana nazw plików z liter wielkich na małe,
  • zamiana spacji w nazwach plików na podkreślenia,
  • wyszukiwanie, usuwanie, kopiowanie plików,
  • liczenie liczby plików/katalogów.

Jednym z najbardziej frustrujących dla mnie procesów w terminalu było rozpakowywanie, a następnie poprawna instalacja programów, których pakiety kompresowane są w archiwach .tar lub .gz. Często więc korzystałem z gotowego przygotowanego wcześniej skryptu jakim jest rozpakowywanie i instalacja pakietów archiwów tar. Automatyczne tworzenie/edycja użytkowników może być natomiast szczególnie przydatne dla administratorów.

Tak, jak wspomniałem wcześniej, można wszystko. Od operacji na plikach, po automatyzację tworzenia użytkowników lub nawet zarządzania procesami w całym systemie.

Jak tworzyć skrypty bashowe?

Jak każdy język programowania, podobnie język powłoki bash ma swoją składnię i zasady jej stosowania. 

  1. Każdy skrypt bash musi zawierać w pierwszej linii zapis. 

#!/bin/bash

       2. Każde zapisane w skrypcie polecenie musi być zapisane w oddzielnej linii, a jeżeli chcemy zapisać kilka w tej samej linii, musimy oddzielić je średnikiem.

3. Echo – instrukcja wyjścia.

$ echo ‘to jest napis’

to jest napis

       4. Zmienne tworzymy, zapisując poniższą instrukcję. 

$zmienna=’Proszę podać imię’

Proszę podać imię

Aby odwołać się do danej zmiennej, musimy dodać przed jej nazwą znak dolara.

       5. If…else. Konstrukcja if…else wygląda następująco.

Najpierw sprawdzamy warunek. Tutaj sprawdzamy, czy zmienna o nazwie – a jakże – zmienna jest większa od liczby 10. Jeśli tak, wykonamy instrukcję, znajdującą się po słowie then. Jeśli jednak warunek ten nie jest spełniony, wykonamy instrukcję, która występuje po else. Możemy również stosować instrukcje bez warunku po else oraz bardziej rozbudowane za pomocą elif, gdzie możemy umieścić tyle warunków, ile nam się podoba

Operatory porównania do wykorzystania w warunku:

  • -d – plik istnieje i jest katalogiem,
  • -e – plik istnieje,
  • = – sprawdza, czy wyrażenia są równe,
  • != – sprawdza, czy wyrażenia są różne,
  • -n – wyrażenie ma długość większą niż 0,
  • -z – wyrażenie ma zerową długość,
  • -lt – mniejsze niż,
  • -gt – większe niż
  • -ge – większe lub równe, 
  • -le – mniejsze lub równe.

       6. Instrukcja case

Instrukcja case to odpowiednik używanej w prawie wszystkich językach programowania instrukcji switch. Jeżeli nasza zmienna jest taka sama, jak wzorzec, wykonane zostanie polecenie, którego użyjemy tuż po wzorcu. Jeśli zmienna nie będzie pasować do żadnego wzorca, zostanie wykonana komenda opisana jako polecenie_wykonywane_domyslnie.

A oto przykład.

       

7. Pętla for

Pętla for to typowa pętla iteracyjna, która będzie wykonywać polecenia stworzone w jej ciele albo tam, gdzie poniżej została napisana komenda echo.

A oto wynik.

       8. Pętla while

Pętla while to instrukcja, która składa się z warunku i ciała. Najprościej ujmując: dopóki warunek podany między kwadratowymi nawiasami będzie spełniony (czyli będzie równał się wartości true), to będą wykonywane komendy, znajdujące się w jej ciele. Należy uważać, aby nie stworzyć przypadkowo nieskończonej pętli.

Powyższy skrypt wyświetli aktualną datę co 60 sekund

       9. Polecenie read

Read służy do odczytu danych z wejścia, czyli wprowadzonych przez użytkownika.

$read imie

Kamil

Po wpisaniu Kamil i odwołaniu się do zmiennej imie na ekranie wyświetli nam się zawartość zmiennej imie, czyli w tym przypadku ciąg znaków Kamil.

$echo $imie

Kamil

Przykłady skryptów bashowych

Poniżej przedstawię kilka przykładów gotowych do wykorzystania skryptów. Tych kilka przykładów pokazuje dobitnie, jak szeroka jest skala zastosowania skryptów. Niektóre mogą na pierwszy rzut oka wydawać się skomplikowane, ale po krótkim epizodzie regularnych ćwiczeń powinniśmy już kojarzyć większośc kontrukcji, jakie są możliwe do utworzenia dzięki powłoce bash.

  • Skrypt zmieniający nazwy plików z wielkich liter na małe

  • Rada do wykrywania zalogowanych znajomych

  • Skrypt do instalacji podstawowych narzędzi tworzenia oprogramowania w języku php

Pułapka przy używaniu skryptów bash

Używanie skryptów bash ma jedną wadę, która może mieć swoje następstwa i powodować problemy. Dlatego też warto zwrócić uwagę, czy w taką pułapkę nie wpadliśmy. 

Kiedy już postanowimy wykorzystać skrypty bashowe w naszej pracy, wykonujemy czynności, w których dany skrypt nas wyręcza i przyzwyczajamy się do tego, że nie musimy już nic robić sami. Po dłuższym czasie, gdy znajdziemy się w sytuacji, gdy mamy do wykonania takie samo zadanie, ale nie mamy akurat w danym miejscu czy momencie dostępnego naszego skryptu, może się okazać że już dawno zapomnieliśmy, jak wykonać daną czynność krok po kroku, bez „wspomagania”.  Warto więc pilnować się, aby nie dopuścić do takiej sytuacji, bo może to doprowadzić do tego, że pracę, którą kiedyś wykonywaliśmy „na piechotę”, teraz bez skryptu będziemy wykonywali kilka razy dłużej, ponieważ straciliśmy biegłość lub – co gorsza – zapomnieliśmy, jak dane zadanie wykonać i musimy się wszystkiego uczyć od nowa. Dodatkowo często może się nam zdarzyć, że nie korzystamy z własnego skryptu, ale z jakiegoś gotowca z internetu – bez zrozumienia,w jaki sposób działają komendy wewnątrz skryptu. Polecam więc, przed rozpoczęciem pracy za pomocą skryptów bash, zapoznanie się z komendami oraz zrozumienie ich – powinno to skutecznie zapobiec zaistnieniu powyżej opisanej sytuacji.
Reasumując: skrypty bash to potężne narzędzie, obok którego nie warto przechodzić obojętnie. Warto się z nimi zapoznać oraz umiejętnie i rozsądnie wykorzystywać. Z pewnością ułatwi nam pracę, dzięki czemu będziemy mogli ten czas spożytkować bardziej produktywnie. Zamiast klepać bez sensu te same komendy kilkadziesiąt, a czasami i setki razy, bo tracimy wtedy często nie tylko czas swój lub innych, ale często też pieniądze firmy przeznaczone na projekt, który aktualnie wykonujemy.

Nie ma też się co przerażać tym, jak wyglądają komendy terminala. Nie jest to tak trudne, jak mogłoby się początkowo wydawać. Często nie trzeba też się na tym znać, ponieważ tysiące gotowych rozwiązań w postaci skryptów leżą w całym internecie, dostępne zupełnie za darmo dzięki ogromnej społeczności Linuxa, która chętnie dzieli się swoimi projektami.