From: xf0r3m
+ 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. +
++ 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. +
++ 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. +
++ 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. +
++ 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. +
++ 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. +
++ 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Ä.
+
+ 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;