From 8b590d97a4f4d69ac0f19473e8d9127fe1e31add Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Wed, 15 May 2024 13:46:34 +0200 Subject: [PATCH] =?utf8?q?Kontynuowanie=20tworzenia=20dodatku=20A.=20Podro?= =?utf8?q?zdzaia=C5=82=2018.6.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- articles/terminallog/Linux.Podstawy.html | 190 ++++++++++++++++++++++- 1 file changed, 189 insertions(+), 1 deletion(-) diff --git a/articles/terminallog/Linux.Podstawy.html b/articles/terminallog/Linux.Podstawy.html index e52d136..b0a8b6f 100644 --- a/articles/terminallog/Linux.Podstawy.html +++ b/articles/terminallog/Linux.Podstawy.html @@ -14001,7 +14001,195 @@ done wykonywana dopóki warunek będzię spełniony (będzie zwracać prawdę). Blok kodu pętli, kończy się słowem kluczowym done. -

+

+

18.4.2. Pętla for

+

+ 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. +

+

18.4.3. Inne pętle oraz instrukcje sterujące

+

+ 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. +

+

18.5. Funkcje

+

+ 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. +

+

18.5.1. Definicja oraz wywołanie funkcji

+

+ 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;
+
+

18.5.3. Dołączanie plików skryptów

+

+ 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. +

+

18.6. Inne przydatne narzędzia

+

+ 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. +

+

18.6.1 Polecenie cut

+

+ 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 |...
+
+

18.6.2. AWK

+

+ 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; -- 2.39.5