From ee288f337b6424f10bc7ae71321c0655812c5206 Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Fri, 10 May 2024 14:01:40 +0200 Subject: [PATCH] =?utf8?q?Rozpocz=C4=99cie=20tworzenia=20dodatku=20A.=20Po?= =?utf8?q?drozdzia=C5=82=2018.2.1.=20-=20opisano=20definicj=C4=99=20zmienn?= =?utf8?q?ych.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- articles/terminallog/Linux.Podstawy.html | 208 +++++++++++++++++++++++ 1 file changed, 208 insertions(+) diff --git a/articles/terminallog/Linux.Podstawy.html b/articles/terminallog/Linux.Podstawy.html index ddc629f..14ccebe 100644 --- a/articles/terminallog/Linux.Podstawy.html +++ b/articles/terminallog/Linux.Podstawy.html @@ -13365,6 +13365,214 @@ xf0r3m@vm-f99031d:~$ zaawansowanym wykorzystaniu tej powłoki powstawał osobny materiał

+

18. Dodatek A. Podstawy programowania skryptów w powłoce BASH

+

+ Jak już wspomniałem w 14 rozdziale do zrozumienia tego materiału + nie są potrzebne żadne umiejętności programistyczne. Dlatego też + przeniosłem rozdział o tworzeniu skrytów powłoki na sam jego koniec + do roli dodatku. +

+

+ Wśród Uniksów mamy dostępne kilka rodzajów powłok. Najczęściej będą + to powłoki BASH oraz KSH (wykorzystywana w środowiska BSD). Obecnie + w wielu dystrybucjach możemy spotkać się z ewolucją kwestii domyślnej + powłoki a przynajmniej dla naszego domyślnego użytkownika. Co raz + częściej możemy spotkać się z takimi powłokami jak ZSH oraz FISH są + one następcami powłoki BASH, zawierającymi wiele udogodnień + pozwalających na łatwiejsze tworzenie poleceń powłoki. Obecnie na + popularności zyskuje projekt o nazwie nu-shell jest to + nowy rodzaj połoki zmieniający dotychczasowe doświadczenia z nią + związane. Nie mniej jednak informacje przedstawione w tym rozdziale + będą działać w powłoce BASH oraz z pewnymi ograniczeniami i potrzebą + dostosowania w powłoce KSH. Dostosowanie tych informacji do innych + programów powłoki pozostawiam wam. +

+

18.1. Podstawy tworzenia skryptów

+

+ Podczas tworzenia skryptu powłoki, warto miec uwadze to że ma się + do dyspozycji powłokę, na drugiej karcie lub + drugim oknie. Przed utworzeniem skryptu można przetestować, niektóre + pomysły zanim zostaną one zapisane w skrypcie. Może być to + szczególnie przydatne, gdy działanie skryptu może byc destrukcyjne - + np. skrypt coś usuwa. Sprawdzenie tego czy nasze pomysły maja w + ogóle sens, pozwala zaoszczędzić czas podczas debugowania skryptu. + Może nam się wydawać, że pewne konstrukcje powłoki są cieżkie do + zapisania w postaci polecenie. Tak może faktycznie być, ale weźmy + pod uwagę to, że te konstrukcje mają szczególnie zaznaczony początek + i koniec. Jeśli powłoka nie napotka odpowiedniego słowa kluczowego w + wprowadzonym wierszu polecenie wówczas przejdzie w tryb wielolinii, + w którym to będzie można kontynuować wprowadzanie polecenia. +

+

18.1.1. Początek skryptu

+

+ Jak może pamiętamy z podrozdziału o językach skryptowych na początku + każdego skryptu umieszczamy linię wskazującą jednoznacznie na + program interpretujący zawartość skryptu. W przypadku skryptów + powłoki ta linia wygląda następująco: +

+
+#!/bin/bash
+
+

+ W dobrym tonie jest pozostawienie jednej linii odstępu do wskazania + interpretera a treści skryptu. Nie raz możemy spotkać się takim + zapisem jak: +

+
+#!/bin/sh
+
+

+ W tym przypadku możemy to dwojako interpretować, albo interpreterem + skryptu jest klasyczna powłoka Bourne-a, albo autor zakłada, + że domyślnym programem dostarczającym powłokę jest BASH, a plik + /bin/sh jest tylko dowiązaniem symboliczym do + /bin/bash. W przypadku Debiana /bin/sh jest + dowiązaniem do powłoki DASH bedąca tworem podobnym do + KSH. Takie skrypty zazwyczaj wykorzysują proste polecenie + oraz instrukcje bez specyficznych dla BASH mechanizmów. +

+

18.1.2. Prosty skrypt.

+

+ Na potrzeby tego podrozdziału stworzymy pierwszy skrypt składający + się z jednego polecenia echo. Polecenie to służy + do wyświetlania ciągów znaków podanych jako argumenty. Polecenie to + posiada kilka przydatnych opcji, których opisy znajdują się na + stronie podręcznika. +

+
+#!/bin/bash
+
+echo "Hello, World!";
+
+

+ Te dwie linie nalezy zapisać w pliku. Możemy dopisać rozszerzenie + .sh, wówczas nasz edytor będzie kolorować składnię skryptu. + Obecnie edytor mogą uruchamiać odpowiednie kolorowanie składni + na podstawie zawartości pliku. Vim działa na takiej zasadzie. + Plik należy zapisać i zamknąć następnie otworzyć go ponownie. +

+

18.1.3. Uruchomienie skryptu

+

+ Uruchomienie skryptu powłoki BASH może odbyć się na dwa sposóby: + bezpośrednio z wiersza polecenia oraz pośrednio podając ścieżkę do + skryptu poleceniu bash. Uruchomienie bezpośrednie wymaga + nadania plikowi uprawnień do wykonywania. Wówczas takie uruchomienie + wygląda następująco: +

+
+$ ls -al test.sh
+-rw-r--r-- 1 xf0r3m xf0r3m 35 05-10 12:08 test.sh
+$ ./test.sh
+-bash: ./test.sh: Brak dostępu
+$
+$ chmod +x test.sh
+$ ./test.sh
+Hello, World!
+
+

+ Teraz jeśli odbiorę uprawnienia wykonywania dla tego pliku to i tak + będę wstanie go uruchomić. Poprzez uruchomienie pośrednie. +

+
+$ chmod -x test.sh
+$ ls -al test.sh
+-rw-r--r-- 1 xf0r3m xf0r3m 35 05-10 12:08 test.sh
+$ bash test.sh
+Hello, World!
+
+

+ Oczywiście te uruchomienia poza poleceniami się niczym innym nie + różnią. W momencie uruchomienia skryptu, dochodzi to startu procesu + podpowłoki, który wykonuje kolejno jedno po drugim polecenie zapisane + w pliku skryptu. Efekty uruchomienia tych sposóbów są identyczne. +

+

18.1.3. Debugowanie skryptów.

+

+ W przypadku skryptów użycie słowa debugowanie jest określeniem + nadwyrost, nie mniej jednak możliwe jest śledzenie tego co robi + skrypt, poprzez wywołanie procesu powłoki wraz z opcją + -x, mozna to zarówno zrealizować przez uruchomienie + pośrednie jak i bezpośrednie. Jednak raczej stosuje się tylko + uruchomienie pośrednie. Nikt nie chce aby jego standardowe wyjście + zalała fala informacji z np. każdą wartością zmiennej zadeklarowanej + w skrypcie. +

+
+#!/bin/bash -x
+...
+$ bash -x test.sh
++ echo 'Hello, World!'
+Hello, World!
+
+

+ Każdy znak plusa (+), oznacza że dane polecenie + zostało uruchomione w podpowłoce. Więcej niż jeden taki symbol może + mówić nam, że mamy doczynienia z wyrażeniem okrągłych nawiasów lub + z podstawieniem polecenia. Obie te konstrukcje zostaną omówione w tym + rozdziale. +

+

+ Teraz kiedy wyjaśniliśmy sobie w jaki sposób utworzyć, uruchomić oraz + w wrazie problemów wyświetlić więcej szczegółów w celu namierzenia + błedu. Możemy poznać podstawowe instrukcje. +

+

18.2. Podstawowe instrukcje powłoki.

+

+ Głównym celem jaki przyświeca tworzeniu skryptów powłoki jest + automatyzacja powtarzalnych zadań wykonywanych w powłoce dystrybucji + Linuxa. Zatem jej naprostszą oraz najbardziej złożoną instrukcją + będzie najzwyklejszy uruchamiany przez nią program. Możemy dla + przykładu umieścić w skrypcie z poprzedniego podrozdziału polecenie + ls. +

+
+$ cat test.sh
+#!/bin/bash -x
+
+echo "Hello, World!";
+ls
+
+

+ Same polecenie echo jest instrukcją + powłoki, co za tym idzie poleceniem skryptu. +

+

+ Jak możemy zauwazyć na powyższym przykładzie linia z instrukcją + echo, kończy się średnikiem + (;)a linia z ls + nie. Generalnie średnik nie jest wymagany na końcu + linii. W ten sposób BASH interpretując skrypt wie gdzie się kończy + polecenie. Jeśli zaś linia musi zawierać dwa polecenia, to należy + umieszczać między poleceniami średnik. Jest jeszcze kilka przypadków + gdy należy stosować średniki, ale przypomnę o tym w sposobnym + momencie. Jeśli poza BASH-em programujemy w C lub w PHP, gdzie te + średniki są wymagane to nie ma przeszkód aby je stosować. +

+

18.2.1. Zmienne

+

+ Instrukcje programowania dostarczane w wraz powłoka BASH pozwalające + na pisanie skrytów, są pełnoprawnym językiem programowania. Jak każdy + inny język potrzebuje on konstrukcji, które pozwolą mu na pracę z + danymi. Tak najprostszą z konstrukcji znaną także w innych językach + są zmienne - kontenery na dane, ułatwiające + zapisanie toku myślenia w postaci algorytmu. W programowaniu ma to + swoje odzwierciedlenie na pamięci, pozwalajac przypisać do + niewielkich obszarów pamięci, identyfikatory aby móc sie odwołać w + kodzie źródłowym do ich zawartości. +

+

+ W BASH-u (będę używać tego określenia, na programowanie skryptów + powłoki BASH. Myślę że upowszechniło się na tyle, że śmiało możemy + powiedzieć o programowaniu w BASH-u.) zmienne są definiowane w + prosty sposób. Podajemy nazwę zmiennej (identyfikator), następnie + znak równości (=) po tym znaku podajemy wartość. + Ważne jest aby nie robić przerw między tymi + elementami, wówczas nazwa zmiennej zostanie potraktowana jako + polecenie (nazwa programu do uruchomienia). +

+
+var=1;
+

2024; COPYLEFT; ALL RIGHTS REVERSED; -- 2.39.5