From: xf0r3m done.
-
+ PÄtla for dziaÅa na odmiennej zasadzie niż pÄtla + while. W tym przypadku zamiast warunku, mamy listÄ oraz + jej element (zmiennÄ ). PÄtla wykonuje swoje dziaÅanie do momentu, aż + skoÅczÄ siÄ elementy na liÅcie. Elementy te sÄ przypisywane do + zmiennej i nastÄpnie uruchamiany jest blok kodu pÄtli. Za pomocÄ + zmiennej możemy odwÅaÄ siÄ do elementu ustawionego dla tego + przebiegu pÄtli. Poniżej znajduje siÄ przykÅadowa pÄtla for + realizujÄ ca to samo zadanie co pÄtla while. +
+
+for i in 1 2 3 4 5 6 7 8 9 10; do
+ echo "${i}: $(expr $i \* $i)";
+done
+
+ + W tym przypadku list 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. +
++ Poza omówionymi wyżej pÄtlami, BASH oferuje jeszczÄ pÄtlÄ + do-while, której cechÄ charakterystycznÄ jest fakt, iż + 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 + 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 + 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 + wyÅwietla nazwy kolorów dostÄpnych do wyÅwietlenia w powÅoce, + po wybraniu koloru, zostanie wyÅwietlona jego próbka. +
+
+colors="black red green yellow blue purple cyan white";
+select i in $colors; do
+ case $i in
+ 'black') cc=0;;
+ 'red') cc=1;;
+ 'green') cc=2;;
+ 'yellow') cc=3;;
+ 'blue') cc=4;;
+ 'purple') cc=5;;
+ 'cyan') cc=6;;
+ 'white') cc=7;;
+ esac
+ echo -e "${i}: \e[1;4${cc}m \e[0m";
+done
+
+ + Instrukcjami wpÅywajÄ cymi na dziaÅanie pÄtli w BASH-u sÄ instrukcje: + break oraz continue. + Instrukcja break sÅuży przerwaniu wykonania pÄtli i + przejÅciu do instrukcji znajdujÄ cej siÄ tuż za pÄtlÄ , inaczej jest + w przypadku instrukcji continue. Instrukcja ta powoduje + zresetowanie przebiegu pÄtli - wykonanie wraca do sprawdzenia + warunku i rozpoczÄcia wykonania bloku kodu od nowa. +
++ Funkcje w BASH-u sÅuÅ¼Ä temu samemu celowi co w innych jÄzykach + programowania - udostÄpnieniu fragmentów kodu realizujÄ cego + powtarzalne zadania, aby nie trzeba byÅo ich przepisywaÄ. + Dopasowuje siÄ algorytm tak, aby mógÅ dziaÅaÄ z podanymi z zewnÄ trz + danymi, ponieważ funkcjÄ uruchamia siÄ w taki sam sposób jak + polecenie. +
++ Definicja funkcji wymaga użycia specjalnej konstrukcji + function. PrzykÅadowÄ definicjÄ zamieszczono + poniżej: +
+
+function square () {
+ echo "$(expr $1 \* $1)";
+}
+
+
+ Definicja funkcji wymaga sÅowa kluczowego
+ function nastÄpnie nazwy funkcji
+ oraz pary okrÄ
gÅych nawiasów (()). SekcjÄ bloku
+ kodu funkcji wskazujÄ
nawiasy klamrowe ({}).
+ Dane z zewnÄ
trz zostaÅy zaimplementowane pod postaciÄ
parametrów
+ pozycjnych. OczywiÅcie, może nam siÄ wydawaÄ, że definiowanie
+ funkcji dla pojednczego polecenia może nie koÅca mieÄ sens,
+ nie mniej jednak takie dziaÅanie może posÅużyÄ jako ustawienie
+ aliasu, dla czynnoÅci, które mozna zapisaÄ w
+ krótki i prosty sposób, nie tÅumaczÄ
cy jednak dokoÅca jaka operacja
+ jest wykonywana.
+
+ Funkcje tak jak już wspominaÅem, sÄ wywoÅywane jak polecenia. Tak + wiÄc chcÄ c wywoÅaÄ wczeÅniej zdefiniowanÄ funkcjÄ należy zapisaÄ + pod jej definicjÄ nastÄpujÄ ce polecenie: +
++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Ä + 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 + bÄdzie taki sam, wiÄc dla intepretera wykonujÄ cego gÅówny skrypt + wczytane z innego pliku funkcjÄ bÄdÄ dostÄpne, przez co gÅówny + skrypt bÄdzie wstanie z nich skorzystaÄ. +
++ DoÅaczenie dodatkowego skryptu można zrealizowaÄ na dwa sposoby. + WykonujÄ one tÄ samÄ operacjÄ i różniÄ siÄ tylko zapisem. Do wyboru + mamy polecenie source oraz zwykÅÄ kropkÄ + (.). +
++source functions.sh +#lub: +. functions.sh ++
+ Drugi sposób nie jest tożamy z takim zapisem jak:
+ ./functions.sh. Tym przypadku
+ kropka zostaÅa użyta jako element Åcieżki. My bÄdziemy
+ wykorzystywaÄ jÄ
jako polecenie.
+
+ TworzÄ c skryptu w BASH-u, za pewne bÄdziemy pracowaÄ z tekstami. + Takim zadaniem może byÄ wyciÄ gniÄcie z pliku feed-u RSS + adresu odnoÅnika do najnowszej wersji oprogramowania, którego + używamy. Jest to jedno z kilku przykÅadów, do których bÄdziemy + potrzebowali narzÄdzi, które mogÄ byÄ wykorzystywane w wielu + skryptach. +
++ Polecenie cut może byÄ wykorzystywane do + ekstrakcji podciÄ gu znaków z innego ciÄ gu. W tym przypadku jego + dziaÅanie bÄdzie opieraÄ siÄ na wskazaniu ogranicznika za pomocÄ + opcji -d, przez co ciag znaków - najczÄsciej przekazany na + standardowej wejÅcie (polecenie cut czÄsto jest umieszczane + w potoku) - podzielony zostaje na pola, które możemy wybraÄ podajÄ c + numer tego pola liczony od poczÄ tku ciÄ gu. Tutaj warto zazanaczyÄ, + że czÄÅÄ ciÄ gu do wystÄ pienia pierwszego ogranicznika, bÄdzie + pierwszym polem. DostÄp do pól uzyskujemy za pomocÄ opcji + -f +
++...| cut -d " " -f 2 |... ++
+ 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 + Å¼Ä 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. + 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. +
+
+... | awk '{printf $1}' | ...
+
+ + NarzÄdzie zbierze wszystkie ciÄ gi wystÄpujÄ ce w tej kolumnie w jeden + ciÄ g bez żadnych przerw. DodajÄ c trzy znaki, możemy zamieniÄ ten + nieczytelny ciÄ g znaków, chociażby w listÄ dla pÄtli for. +
+
+... | awk '{printf $1" "}' | ...
+
2024; COPYLEFT; ALL RIGHTS REVERSED;