]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Rozpoczęcie tworzenia dodatku A. Podrozdział 18.2.1. - opisano definicję zmiennych.
authorxf0r3m <jakubstasinski@protonmaill.com>
Fri, 10 May 2024 12:01:40 +0000 (14:01 +0200)
committerxf0r3m <jakubstasinski@protonmaill.com>
Fri, 10 May 2024 12:01:40 +0000 (14:01 +0200)
articles/terminallog/Linux.Podstawy.html

index ddc629f35c9ebcdfce02cb2bb721ab04f24baf38..14ccebedb224b7a33f6282a192cf3f4ddfd5ac56 100644 (file)
@@ -13365,6 +13365,214 @@ xf0r3m@vm-f99031d:~$
           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;