From b3e7d453efc1f9e817a613f38470cbf28bec40ba Mon Sep 17 00:00:00 2001
From: xf0r3m
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 + to powÅoki BASH oraz KSH (wykorzystywana w Årodowiskach 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 + pozwalajÄ cych na Åatwiejsze tworzenie poleceÅ. 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 @@ -13397,7 +13397,7 @@ xf0r3m@vm-f99031d:~$ 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 + zapisania w postaci polecenia. 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, @@ -13426,7 +13426,7 @@ xf0r3m@vm-f99031d:~$ 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 + /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. @@ -13471,7 +13471,7 @@ Hello, World!
Teraz jeÅli odbiorÄ uprawnienia wykonywania dla tego pliku to i tak - bÄdÄ wstanie go uruchomiÄ. Poprzez uruchomienie poÅrednie. + bÄdÄ wstanie go uruchomiÄ, poprzez uruchomienie poÅrednie.
$ chmod -x test.sh
@@ -13520,7 +13520,7 @@ Hello, World!
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Ä
+ Linuksa. Zatem jej najprostszÄ
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.
@@ -13557,7 +13557,7 @@ ls
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
+ niewielkich obszarów pamiÄci, identyfikatory aby móc odwoÅaÄ siÄ, w
kodzie źródÅowym do ich zawartoÅci.
@@ -13631,7 +13631,7 @@ cat /etc/passwd | grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'
Powyższy przykÅad ma duży potencjaÅ optymalizacyjny swojÄ
drogÄ
,
- ponieważ pierwsze polecenie można pominÄ
Ä i podaÄ pliki odrazu
+ ponieważ pierwsze polecenie można pominÄ
Ä i podaÄ pliki od razu
poleceniu grep.
18.2.4. Podstawienie polecenia
@@ -13657,7 +13657,26 @@ var=$(grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,');
# lub:
var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`;
- + Wyrażenie nawiasów okrÄ gÅych lub podstawienie podpowÅoki, umożliwia + nam oddzielenie wykonania pewnych poleceÅ od gÅównego procesu + podpowÅoki wykonujÄ cego skrypt. Użycie tego mechinizmu sprawdza siÄ + do zapisania, poleceÅ w zwykÅym nawiasie okrÄ gÅym. +
++(cd ytfzf && make install doc) ++
+ Jest to szczególnie przydane, gdy musimy trzymaÄ kurczowo jakiÅ + lokalizacji w systemie plików, a niektóre czynnoÅci tak jak + instalacja projektu pokazana na powyższym przykÅadzie wymaga + zmiany tej + Åcieżki. Åcieżka może zostaÄ zmieniona w podpowÅoce i wykonanie + czynnoÅci + również. Nie bÄdzie to miaÅo wpÅywu na gÅówny nurt dziaÅania skryptu. +
+Jak byÅo prawdopodobnie wspomniane o znakach cytowania w drugim rozdziale. W BASH-u do dyspozycji mamy 3 rodzaje cudzysÅowów: @@ -13680,7 +13699,7 @@ var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`; różne funkcje. Szczególnie może mieÄ to znaczenie przy takich poleceniach jak sed czy grep.
-Przekazanie do skryptu informacji jest jak najbardziej możlwe, oczywiÅcie możemy zrobiÄ to jak przypadku innych jÄzyków - podczas @@ -13721,7 +13740,7 @@ $ ./test.sh foo bar wówczas wszysktie paramety sÄ jednym elementem. DostÄp do parametrów w ten sposób osiÄ gamy poprzez - $*.
-Wyrażenie parametru posiada w BASH-u kilka funkcji. Jednak chyba najważniejszÄ oraz tÄ , która wymaga zapamiÄtania jest separacja @@ -13738,21 +13757,22 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz
OczywiÅcie poza funkcjÄ separacyjnÄ wyrażenie parametru kilka innych zastosowaÅ, jedno już zostaÅo tutaj wymienione, jest to dostÄp do - parametrów pozycyjnych powyżej 10-tej pozycji. + parametrów pozycyjnych powyżej 10-tej pozycji. PozostaÅe sÄ dostÄpne + na stronie podrÄcznika powÅoki BASH.
-Niektóre narzÄdzie wykorzystywane przez nas do pracy w dystrybucjach Linuksa, zostajÄ przez nas uruchomione i zaraz po tym zostaje nam zwrócony znak zachÄty. I tak naprawdÄ to nie wiemy czy program wykonaÅ swoje zadanie pomyÅlnie czy też nie. Nie mniej jednak - wiÄkszoÅÄ programów dziaÅajÄ cych na Uniksa zwraca takzwany kod + wiÄkszoÅÄ programów dziaÅajÄ cych na Uniksach zwraca takzwany kod wyjÅcia.
@@ -13768,7 +13788,7 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz
RozpoczynajÄ c omawianie wyrażeÅ warunkowych, warto sobie wyjaÅniÄ, że w BASH-u nie operujemy na wartoÅciach logicznych. Na wartoÅciach - logicznych operujÄ polecenie wykonujÄ ce sprawdzenie danego wyrażenia + logicznych operujÄ polecenia wykonujÄ ce sprawdzenie danego wyrażenia warunkowego. Na podstawie wyniku tego wyrażnia narzÄdzia te generujÄ kod wyjÅcia: 0 - dla prawdy i 1 - dla faÅszu. @@ -13810,11 +13830,12 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz plikiem.
- Warunki które wymagajÄ dwóch operatorów, to zazwyczaj takie jakie + Warunki, które wymagajÄ dwóch operatorów, to zazwyczaj takie jakie znamy z lekcji matematyki: a > b, d <= e itd. Przyczym tutaj warto przypomnieÅ, że zapis instrukcji warunkowych (warunków), jest jednoczeÅnie zapisem polecenia, tak wiÄc nie można użyÄ znaków - mniejszoÅci (<) czy wiÄkszoÅci (>), + mniejszoÅci (<) czy wiÄkszoÅci + (>), zamiast nich musimy używaÄ specjalnie przygotowanych na tÄ okazjÄ zamienników:
@@ -13837,12 +13858,12 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgzInstukcje warunkowe na podstawie przekazanych przez programistÄ warunków, zwracaja kod wyjscia, który najczÄÅciej interpretowany jest - przez konstrukcje warnukowe. + przez konstrukcje warunkowe.
Konstrukcje warunkowe sÄ elementem kontrolnym w programowaniu. - Ich zadaniem jest wykonanie okreÅlonych instrukcji w determinowanych + Ich zadaniem jest wykonanie okreÅlonych instrukcji determinowanych na podstawie przekazanej instrukcji warunkowej. I najprostszym tego typu konstrukcjÄ jest if-then-else.
@@ -13867,7 +13888,7 @@ fi zwróciÄ kod wyjÅcia. Po warunku obowiÄ zkowo wystÄpuje Årednik, nastÄpnie sÅowo kluczowethen
otwierajÄ
ce blok kodu dla sytuacji, w której warunek zwróciŠkod
- wyjÅcia równy 0 (potocznie nazwywany prawdÄ
). Po
+ wyjÅcia równy 0 (potocznie nazywany prawdÄ
). Po
tym bloku wystÄpuje sÅowo kluczowe
else otwierajÄ
c tym samym blok
kodu dla każdej innej wartoÅci kodu wyjÅcia, która nie jest zerem.
@@ -13876,10 +13897,10 @@ fi
oraz caÅÄ
konstrukcjÄ.
- KonstrukcjÄ if-then-else można rozszerzyÄ od dodatkowy + KonstrukcjÄ if-then-else można rozszerzyÄ o dodatkowy blok warunkowy elif. W momencie interpretacji takiej konstrukcji BASH sprawdzi na poczÄ tek warunek przy if - nastÄpnie przy elif i jeÅli oba te warunki oba te warunki + nastÄpnie przy elif i jeÅli oba te warunki zwrócÄ niezerowy kod wyjÅcia, wtedy zostanÄ wykonane instrukcje zapisane w bloku else. Warto dodaÄ, że nie ma limitu w iloÅci dodatkowych warunków (elif) tworzÄ c przy tym caÅÄ @@ -13907,7 +13928,7 @@ fi tego przypadku.
-case $alphabet; in
+case $alphabet in
'a') echo "A";;
'b') echo "B";;
esac
@@ -13922,13 +13943,13 @@ esac
pominiÄcie spowoduje bÅÄ
d powÅoki.
- Konstrukcja Case posiada przypadek uniwersalny
+ Konstrukcja case posiada przypadek uniwersalny
wykorzystywany gdy zmienna nie pasuje, do żadnego z przypadków.
WartoÅÄ takiego przypadku zapisuje siÄ symbolem gwiazdki
(*).
-case $alphabet; in
+case $alphabet in
'a') echo "A";;
'b') echo "B";;
*) echo "To nie jest litera alfabetu";;
@@ -13942,7 +13963,7 @@ esac
ograniczaÄ do pojednczej wartoÅci, ale może zawieraÄ warianty.
-case $alphabet; in
+case $alphabet in
'a'|'A') echo "A";;
'b') echo "B";;
*) echo "To nie jest litera alfabetu";;
@@ -13958,11 +13979,11 @@ esac
PÄtle w programowaniu sÅuża wykonywaniu powtarzalnych czynnoÅci
pod pewnym warunkiem. W bloku pÄtli element warunku
- (najprawdopodobniej) ulega zmiania, tak aby pÄtla zakoÅczyÅa siÄ
+ (najprawdopodobniej) ulega zmianie, tak aby pÄtla zakoÅczyÅa siÄ
i interpretacja programu wróciÅa na wÅaÅciwy tor. JeÅli tak siÄ nie
dzieje, to wówczas mamy doczynienia z nieskoÅczonÄ
pÄtlÄ
, tego typu
- konstrukcje nie zawsze muszÄ
oznaczaÄ peÅnego wykorzystania zasobów
- komputera, w zależnoÅci co znajduje siÄ w ich bloku kodu. W BASH-u
+ konstrukcje nie zawsze muszÄ
oznaczaÄ bÅÄ
d programisty, mogÄ
byÄ one
+ pożÄ
dne, w zależnoÅci co znajduje siÄ w ich bloku kodu. W BASH-u
doÅÄ czÄsto wykorzystywane sÄ
dwa rodzaje pÄtli.
18.4.1. PÄtla while
@@ -13976,8 +13997,8 @@ esac
zmiana jest użależniona od okreÅlonego warunku. Ze wzglÄdu na to, iż
warunek pÄtli musi byÄ prawdÄ
, aby mogÅa ona w ogóle rozpoczÄ
Ä
dziaÅanie - licznik musi zostaÄ zdefiniowany przed pÄtlÄ
. Poniżej
- znajduje siÄ przykÅadowa konstrukcja pÄtli while wyÅwietlajÄ
ca
- kwadraty pierwszych 10 dodatnich liczb.
+ znajduje siÄ przykÅadowa konstrukcja pÄtli while
+ wyÅwietlajÄ
ca kwadraty pierwszych 10 dodatnich liczb.
count=1
@@ -14019,7 +14040,7 @@ for i in 1 2 3 4 5 6 7 8 9 10; do
done
- W tym przypadku list zostaÅa zapisana z rÄki (hardcoded).
+ W tym przypadku lista zostaÅa zapisana z rÄki (hardcoded).
Jednak tutaj panuje duża elastycznoÅÄ, listÄ możemy przekazaÄ zmiennÄ
lub w postaci podstawienia polecenia. Wykonanie zadania zostaÅo
skompresowane do pojedynczej linii.
@@ -14031,15 +14052,18 @@ done
wykona siÄ co najmniej raz, ponieważ sprawdzanie warunku wystÄpuje
poniżej bloku kodu pÄtli, kiedy zostanÄ
wykonane jej instrukcje
wówczas bÄdzie można okreÅliÄ czy warunek zwraca kod wyjÅcia 0 czy
- też inny. KolejnÄ
z pÄtli jest pÄtla select, która na
+ też inny.
+
+
+ KolejnÄ
z pÄtli jest select, która na
podstawie listy wyÅwietla menu, oddajÄ
c wykonanie programu pod
interaktywnÄ
decyzjÄ użytkownika. Użytkownik wybierajÄ
c odpowiedni
numer ustawia wartoÅÄ przedstawionÄ
w tym przypadku do zmiennej,
- do której można siÄ odwoÅaÄ w bloku kodu pÄtli. PowtarzalnoÅÄ tej
+ do której można siÄ odwoÅaÄ w bloku pÄtli. PowtarzalnoÅÄ tej
konstrukcji, polega na tym, że bÄdzie ona ciÄ
gle pytaÄ użytkownika o
wybór do momentu, aż nie przerwiemy wykonania caÅego skryptu lub
- w bloku kodu funkcji zaimplementujemy warunek, że jeÅli zostaÅa
- wybrana powiedzmy litera 'q', to zakoÅcz pÄtlÄ. Poniższy przykÅad
+ w kodzie pÄtli zaimplementujemy warunek, że jeÅli zostaÅa
+ wybrana powiedzmy litera 'q', to zakoÅcz pÄtle. Poniższy przykÅad
wyÅwietla nazwy kolorów dostÄpnych do wyÅwietlenia w powÅoce,
po wybraniu koloru, zostanie wyÅwietlona jego próbka.
@@ -14114,7 +14138,7 @@ square 4;
KorzystajÄ
c z możliwoÅci tworzenia funkcji może siÄ okazaÄ, że jest
ich caÅkiem spora iloÅÄ i dużo lepszym sposobem na zarzÄ
dzanie nimi
jest przeniesienie do innego pliku. Wówczas aby móc dalej korzystaÄ
- z tych funkcji muszÄ
byÄ one dostÄpne dla skryptu w którym bÄdÄ
+ z tych funkcji muszÄ
byÄ one dostÄpne dla skryptu, w którym bÄdÄ
wywoÅywane. W BASH-u nie mamy takich poleceÅ jak include czy
import. Tutaj musimy posÅużyÄ siÄ wywoÅaniem skryptu
w tym samym proces powÅoki, dziÄki temu obszar pamiÄci
@@ -14134,7 +14158,7 @@ source functions.sh
. functions.sh
- Drugi sposób nie jest tożamy z takim zapisem jak:
+ Drugi sposób nie jest tożsamy z takim zapisem jak:
./functions.sh. Tym przypadku
kropka zostaÅa użyta jako element Åcieżki. My bÄdziemy
wykorzystywaÄ jÄ
jako polecenie.
@@ -14169,15 +14193,17 @@ source functions.sh
Samo narzÄdzie AWK jest jÄzyka programowania operujÄ
cym na tekstach.
Nie mniej jednak, nie bÄdziemy skupiaÄ siÄ na szczegóÅach tego
narzÄdzia. Wykorzystamy jednÄ
z jego funkcjonalnoÅci. Wspomniane
- wczeÅniej ma jednÄ
zasadniczÄ
wadÄ, możemy miec problem z okreÅleniem
+ wczeÅniej rozwiÄ
zanie zwiÄ
zane z poleceniem cut
+ ma jednÄ
zasadniczÄ
wadÄ, możemy miec problem z okreÅleniem
żÄ
danego pola, w momencie gdy znak ogranicznika wystÄpuje po sobie
kilka razy. NajczÄÅciej jest tak z biaÅymi znakami
(spacjÄ
oraz znakami tabulacji). Wówczas możemy skorzystaÄ z pól
prezentowanych przez narzÄdzie AWK, pola tego narzÄdzia sÄ
tak
- naprawdÄ kolumnami, wiÄc zadbaÄ o odseparowanie konkretnej linii.
+ naprawdÄ kolumnami, wiÄc należy zadbaÄ o odseparowanie konkretnej
+ linii.
Tutaj podziaÅ jest prosty, każda kolumna rozpoczyna siÄ od każdego
innego znaku nie bÄdÄ
cego tabulatorem lub spacjÄ
. Numer kolumny
- po znaku dolara, tak jak na poniższym przykÅadzie.
+ podajemy po znaku dolara, tak jak na poniższym przykÅadzie.
... | awk '{printf $1}' | ...
@@ -14201,16 +14227,16 @@ source functions.sh
strumieniu danych wejÅciowych.
- W plikach może zajÅÄ taka potrzeba aby zmieniÄ pewien zapis tylko
- w jedenej linii, to wskazanie tej wybranej linii może odbyÄ siÄ na
+ W plikach może zajÅÄ taka potrzeba, aby zmieniÄ pewien zapis tylko
+ w jednej linii, to wskazanie tej wybranej linii może odbyÄ siÄ na
dwa sposoby: za pomocÄ
wyrażenia regularnego lub podajÄ
c konkretny
- numer linii. Wyrażenie regularne sprawdzi sie przy kilku liniach, w
+ numer linii. Wyrażenie regularne sprawdzi siÄ przy kilku liniach, w
przypadku jednej konkretnej, wystarczy podaÄ jej numer.
Przy poczÄ
tkach naszej pracy ze skryptami, najczÄÅciej bÄdziemy
wykorzystywaÄ raczej opcje find and replace, nie mniej
- jednak specyficzna skÅadania polecenia sed wymaga aby
+ jednak specyficzna skÅadania polecenia sed wymaga, aby
chociażby pokazaÄ jak wyglÄ
dajÄ
polecenia insert,
append czy print.
@@ -14232,13 +14258,15 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
Polecenie to domyÅlnie zwróciÄ na standardowe wyjÅcie caÅÄ
zawartoÅÄ
pliku z podmienionÄ
liniÄ
, ponieważ jest to edytor strumienia to
- musi on otwrzyÄ plik i dziaÅaÄ na nim w pamiÄci. Aby nasze zamiany
- faktycznie miaÅy jakiÅ skutek musimu dodaÄ opcjÄ -i.
+ musi on otworzyÄ plik i dziaÅaÄ na nim w pamiÄci. Aby nasze zamiany
+ faktycznie miaÅy jakiÅ skutek musimy dodaÄ opcjÄ -i.
Podobnie jest poleceniem append - a,
również wymaga ono opcji -i. SkÅadania tego polecenia
- jest podobna nie mniej jednak zasada dziaÅania jest trochÄ inna.
+ jest identyczna z insert, zmianie ulega tylko literka
+ wskazujÄ
ca polecenie, nie mniej jednak zasada dziaÅania jest
+ trochÄ inna.
Otóż to polecenie dopisze pod wskazanÄ
liniÄ
, podanÄ
wartoÅÄ. W
przypadku naszego przykÅadu, podana wartoÅÄ znalazÅa by siÄ w 22
linii.
@@ -14246,7 +14274,7 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
Polecenie sed - print
Za polecenie print odpowiedzialna jest litera p
- nie ma w tym nic dziwnego, nie mniej jednak warto zaznaczyÄ, że
+ nie ma w tym nic dziwnego, warto jednak zaznaczyÄ, że
polecenie to przyjmuje zakres linii do wyÅwietlania np. jesli
chcemy wyÅwietliÄ linie od 1 do 12, to wówczas możemy skorzystaÄ z
poniższego polecenia:
@@ -14255,9 +14283,9 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt
$ sed '1,12p' test.txt
- Tutaj istotnÄ
role peÅni cytowanie. JeÅli checielibyÅmy wyÅwietliÄ
+ Tutaj istotnÄ
rolÄ peÅni cytowanie. JeÅli checielibyÅmy wyÅwietliÄ
linie od 100 do koÅca pliku, to polecenie sed mogÅo by
- wyglÄ
dac w ten sposób: '100,$p'.
+ wyglÄ
daÄ w ten sposób: '100,$p'.
No dobrze, a jeÅli poczÄ
tek zakresu jest zapisany w zmiennej to
polecenie powinno wyglÄ
daÄ mniej wiÄcej tak
"$a,$p". Problem w tym, że dolna
@@ -14285,7 +14313,7 @@ $ sed "1,${a}p" test.txt
$ sed "s/ala/ola/" test.txt
- Po polecenie s wystÄpuje separator,
+ Po poleceniu s wystÄpuje separator,
nastÄpnie wartoÅÄ poszukiwana, znów separator oraz nowa wartoÅÄ,
która zastÄ
pi wartoÅÄ poszukiwania, na koÅcu polecenia znów wystÄpuje
separator. Polecenie zamieni pierwsze wystÄ
pienie ciÄ
gu
--
2.39.5