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ść.
+ 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).
<pre class="code-block">
var=1;
</pre>
+ <p>
+ Do tak zdefiniowanej zmiennej możemy się odwołać poprzedzając nazwę
+ zmiennej znakiem dolara (<strong>$</strong>).
+ </p>
+<pre class="code-block">
+echo "$var";
+</pre>
+ <p>
+ Polecenie <code class="code-inline">echo</code> wyświetli zawartość
+ zmiennej <code class="code-inline">var</code> na standardowym
+ wyjściu.
+ </p>
+ <h3 id="18.2.2.comments">18.2.2. Komentarze</h3>
+ <p>
+ Ciągi znaków oznaczone jako <strong>komentarze</strong> po przez
+ umieszczenie na ich początku krzyżyka (<strong>#</strong>) są
+ całkowicie ignorowane przez powłokę w trakcie wykonywania skryptu.
+ </p>
+<pre class="code-block">
+# To jest komentarz
+#Tresc komenentarza może przylegać do krzyzyka
+# lub może być miedzy nimi odstep
+</pre>
+ <p>
+ Komentarze mają służyć wyłącznie programiście. Ich zadaniem jest
+ możliwość dodawania notatek do kodu, w celu np. wyjaśnienia zawiłego
+ bloku kodu.
+ </p>
+ <h3 id="18.2.3.pipelines">18.2.3. Potoki</h3>
+ <p>
+ <strong>Potoki</strong> czy inaczej <em>polecenia potokowe</em> są
+ to ciągi poleceń połączonych ze sobą za pomocą mechnizmów
+ wejścia-wyjścia.
+ </p>
+<pre class="code-block">
+cat /etc/passwd | grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'
+</pre>
+ <p>
+ W powyższym poleceniu, dane wejściowe programu
+ <code class="code-inline">cat</code> pochodzą z pliku, ale dane
+ wejściowe polecenia <code class="code-inline">grep</code> pochodzą
+ już ze standardowego wyjścia polecenia
+ <code class="code-inline">cat</code>. Zawartość pliku zostaje
+ przekazana na standardowej wejscie drugiego polecenia, które
+ wyszukuje odpowiedniego wzorca. Ta sama sytuacja tyczy się ostatniego
+ polecenia (<code class="code-inline">sed</code>). Potoki konstrułuje
+ się przy użyciu znaku potoku lub znaku kreski pionowej
+ (<strong>|</strong>).
+ </p>
+ <p>
+ Potoki są przydatne gdy musimy przetworzyć w jakiś sposób dane,
+ wówczas sprowadzamy je do postaci strumienia. Każde z poleceń na
+ potoku wykonuje swoją działkę i przekazuje je dalej, aż trafiają one
+ do zmiennej lub na standardowej wyjście powłoki. Z prostej analogii
+ wygląda to trochę jak praca na linii produkcyjnej.
+ </p>
+ <p>
+ Powyższy przykład ma duży potencjał optymalizacyjny swoją drogą,
+ ponieważ pierwsze polecenie można pominąć i podać pliki odrazu
+ poleceniu <code class="code-inline">grep</code>.
+ </p>
+ <h3 id="18.2.4.commandsubstitution">18.2.4. Podstawienie polecenia</h3>
+ <p>
+ Mając omówione zmienne oraz potoki, to warto może połączyć ze sobą
+ te zagadnienia i zadać pytanie: w jaki sposób można zapisać w
+ zmiennej dane przetwarzane przez potok?
+ </p>
+ <p>
+ Chcąc zapisać wynik działania potoku do zmiennej, należy wykorzystać
+ mechanizm zwany <strong>podstawieniem polecenia</strong>. Działa on
+ na takiej zasadzie, że w momencie napotkania tego mechnizmu przez
+ podpowłokę uruchamiana jest kolejna podpowłoka wykonująca polecenia
+ zapisane w tym przypadku w potoku w podstawieniu polecenia. Po
+ zakończeniu wartość zwracana jest przekazywana do zmiennej.
+ Podstawienie polecenia może mieć dwie postacie, można wykorzystać
+ lewe cudzysłowy (<strong>``</strong>) lub parę okrągłych nawiasów
+ poprzezdzonych znakiem dolara (<strong>$()</strong>). Obie te formy
+ są poprawne. Do niedawna istniała jedynie wersja z cudzysłowami.
+ </p>
+<pre class="code-block">
+var=$(grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,');
+# lub:
+var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`;
+</pre>
+ <h3 id="18.2.5.quotation">18.2.5. Znaki cytowania</h3>
+ <p>
+ Jak było prawdopodobnie wspomniane o znakach cytowania w drugim
+ rozdziale. W BASH-u do dyspozycji mamy 3 rodzaje cudzysłowów:
+ </p>
+ <ul>
+ <li>Lewy cudzysłów - (<strong>`</strong>) - jeden z operatorów
+ podstawienie polecenia.</li>
+ <li>Pojedynczy cudzysłów - (<strong>'</strong>) - cytowanie dosłowne,
+ wszystko zapisane pomiędzy tymi znakami zostanie potraktowane jako
+ ciąg znaków. BASH nie będzie próbować interpretować, żadnych
+ treści w tym i instrukcji.</li>
+ <li>Podwójny cudzysłów - (<strong>"</strong>) - cytowanie niedosłowne,
+ Występujące wewnątrz odwłania do zmiennych czy podstawienia
+ polecenia oraz inne mechnizmy i instrukcje zostaną przez BASH
+ zinterpretowane i wykonane, wówczas wyniki działania BASH-a
+ uzupełnią zapisany ciąg znaków.</li>
+ </ul>
+ <p>
+ Należy o tym pamiętać! Że cudzysłowy w powłoce są rozróżniane i mają
+ różne funkcje. Szczególnie może mieć to znaczenie przy takich
+ poleceniach jak <em>sed</em> czy <em>grep</em>.
+ </p>
+ <h3 id="18.2.6.positionalparams">18.2.6. Parametry pozycyjne</h3>
+ <p>
+ Przekazanie do skryptu informacji jest jak najbardziej możlwe,
+ oczywiście możemy zrobić to jak przypadku innych języków - podczas
+ działania programu poprosić o podanie danych wejściowych. Możemy
+ również użyć mechanizmy <strong>parametrów pozycyjnych</strong>,
+ które pozwolą nam na przekazanie danych wejściowych podczas
+ uruchamiania skryptu.
+ </p>
+<pre class="code-block">
+$ ./test.sh foo bar
+</pre>
+ <p>
+ Dostęp do tak przekazanych danych można uzyskać poprzez odwłanie się
+ do numeru parametru:
+ </p>
+<pre class="code-block">
+#!/bin/bash
+
+echo "1: $1";
+echo "2: $2";
+#
+
+$ ./test.sh foo bar
+1: foo
+2: bar
+</pre> <p>
+ Parametry pozycyjne są czesto wykorzysywane do implementowania
+ opcji skryptów. Paramentrów jest maksymalnie 10 (chociaż jest mozliwe
+ jest uzyskanie dostępu do parametrów powyżej 10 za pomocą mechanizmu
+ <em>wyrażenia parametru</em>.
+ </p>
+ <p>
+ Dostęp do całej listy parametrów pozycyjnych możemy uzyskać na dwa
+ sposoby. Oba są warte poznania. Pierwszym z nich jest lista
+ parametrów, w której każdy jest osobnym elementem. Dostęp do niej
+ uzyskujemy poprzez - <strong>$@</strong> - tego typu odwołanie się.
+ Innym sposobem dostęp do parametrów jako pojedynczego ciagu znaków,
+ wówczas wszysktie paramety są jednym elementem. Dostęp do parametrów
+ w ten sposób osiągamy poprzez - <strong>$*</strong>.
+ </p>
</div>
<p style="margin: 15px; padding: 0; outline: 0;">
2024; COPYLEFT; ALL RIGHTS REVERSED;