zaawansowanym wykorzystaniu tej powłoki powstawał osobny
<a href="https://morketsmerke.github.io/articles/terminallog/BASH_bushido.html">materiał</a>
</p>
+ <h1 id="18.appendixa">18. Dodatek A. Podstawy programowania skryptów w powłoce BASH</h1>
+ <p>
+ 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.
+ </p>
+ <p>
+ 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 <em>nu-shell</em> 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.
+ </p>
+ <h2 id="18.1.bashscriptsbasics">18.1. Podstawy tworzenia skryptów</h2>
+ <p>
+ Podczas tworzenia skryptu powłoki, warto miec uwadze to że ma się
+ do dyspozycji <strong>powłokę</strong>, 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.
+ </p>
+ <h3 id="18.1.1.beginingofscript">18.1.1. Początek skryptu</h3>
+ <p>
+ 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:
+ </p>
+<pre class="code-block">
+#!/bin/bash
+</pre>
+ <p>
+ 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:
+ </p>
+<pre class="code-block">
+#!/bin/sh
+</pre>
+ <p>
+ W tym przypadku możemy to dwojako interpretować, albo interpreterem
+ skryptu jest klasyczna powłoka <em>Bourne</em>-a, albo autor zakłada,
+ że domyślnym programem dostarczającym powłokę jest BASH, a plik
+ <em>/bin/sh</em> jest tylko dowiązaniem symboliczym do
+ <em>/bin/bash</em>. W przypadku Debiana <em>/bin/sh</em> jest
+ dowiązaniem do powłoki <em>DASH</em> bedąca tworem podobnym do
+ <em>KSH</em>. Takie skrypty zazwyczaj wykorzysują proste polecenie
+ oraz instrukcje bez specyficznych dla BASH mechanizmów.
+ </p>
+ <h3 id="18.1.2.simplescript">18.1.2. Prosty skrypt.</h3>
+ <p>
+ Na potrzeby tego podrozdziału stworzymy pierwszy skrypt składający
+ się z jednego polecenia <strong>echo</strong>. 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.
+ </p>
+<pre class="code-block">
+#!/bin/bash
+
+echo "Hello, World!";
+</pre>
+ <p>
+ Te dwie linie nalezy zapisać w pliku. Możemy dopisać rozszerzenie
+ <em>.sh</em>, wówczas nasz edytor będzie kolorować składnię skryptu.
+ Obecnie edytor mogą uruchamiać odpowiednie kolorowanie składni
+ na podstawie zawartości pliku. <em>Vim</em> działa na takiej zasadzie.
+ Plik należy zapisać i zamknąć następnie otworzyć go ponownie.
+ </p>
+ <h3 id="18.1.3.runascript">18.1.3. Uruchomienie skryptu</h3>
+ <p>
+ 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 <em>bash</em>. Uruchomienie bezpośrednie wymaga
+ nadania plikowi uprawnień do wykonywania. Wówczas takie uruchomienie
+ wygląda następująco:
+ </p>
+<pre class="code-block">
+$ 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!
+</pre>
+ <p>
+ Teraz jeśli odbiorę uprawnienia wykonywania dla tego pliku to i tak
+ będę wstanie go uruchomić. Poprzez uruchomienie pośrednie.
+ </p>
+<pre class="code-block">
+$ 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!
+</pre>
+ <p>
+ 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.
+ </p>
+ <h3 id="18.1.3.scriptdebug">18.1.3. Debugowanie skryptów.</h3>
+ <p>
+ 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ą
+ <strong>-x</strong>, 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.
+ </p>
+<pre class="code-block">
+#!/bin/bash -x
+...
+$ bash -x test.sh
++ echo 'Hello, World!'
+Hello, World!
+</pre>
+ <p>
+ Każdy znak plusa (<strong>+</strong>), 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.
+ </p>
+ <p>
+ 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.
+ </p>
+ <h2 id="18.2.basicshellinstructions">18.2. Podstawowe instrukcje powłoki.</h2>
+ <p>
+ 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
+ <em>ls</em>.
+ </p>
+<pre class="code-block">
+$ cat test.sh
+#!/bin/bash -x
+
+echo "Hello, World!";
+ls
+</pre>
+ <p>
+ Same polecenie <code class="code-inline">echo</code> jest instrukcją
+ powłoki, co za tym idzie poleceniem skryptu.
+ </p>
+ <p>
+ Jak możemy zauwazyć na powyższym przykładzie linia z instrukcją
+ <code class="code-inline">echo</code>, kończy się średnikiem
+ (<strong>;</strong>)a linia z <code class="code-inline">ls</code>
+ 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ć.
+ </p>
+ <h3 id="18.2.1.variables">18.2.1. Zmienne</h3>
+ <p>
+ 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ą <strong>zmienne</strong> - 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.
+ </p>
+ <p>
+ 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 (<strong>=<strong>) po tym znaku podajemy wartość.
+ Ważne jest aby <strong>nie robić przerw</strong> między tymi
+ elementami, wówczas nazwa zmiennej zostanie potraktowana jako
+ polecenie (nazwa programu do uruchomienia).
+ </p>
+<pre class="code-block">
+var=1;
+</pre>
</div>
<p style="margin: 15px; padding: 0; outline: 0;">
2024; COPYLEFT; ALL RIGHTS REVERSED;