Okna.  Wirusy.  Laptopy.  Internet.  Biuro.  Narzędzia.  Kierowcy

Do VAR W 1 2 3...N Do zrobione lub w jednej linii: Do VAR W 1 2 3...N; Do ; zrobione
Do zmiennej można podstawiać zarówno wartości numeryczne, jak i znaki ASCII.
Przykład: $ dla i w 1 2 A B Abc ; wykonaj echo $i; gotowe 1 2 A B Abc Przykład wylistowania plików w zmiennej według „maski” dla transkodowania wideo: Do I W*.avi; Do ; zrobione

2. Podstawianie wyników innego polecenia

Do VAR W $(); Do ; zrobione
Przykład wykorzystania wyników polecenia seq: Do I W$(sekwencja [KLUCZ]); Do echo $i; zrobione$ dla i w $(sekwencja 3); wykonaj echo $i; zrobione 1 2 3 $ dla i w $(sekwencja 3 5); wykonaj echo $i; zrobione 3 4 5 $ dla i w $(sekwencja 2 2 6); wykonaj echo $i; gotowe 2 4 6 Przykład wykorzystania wyników polecenia ls: $ dla i w $(ls /$HOME/Video); wykonaj echo $i; zrobione 001.avi 002.avi 003.avi

3. Podstawienie przy użyciu stylu C (styl C)

Do((WYR1; WYR2; WYR3)) Do <список команд> zrobione Do((i=1; tj<=3 ; i++)); Do echo $i; zrobione$ za ((i=1; tj<=3 ; i++)); do echo $i; done 1 2 3 Подробнее о применении C-style в Bash

4. Wyliczenie przy użyciu nawiasów klamrowych (..)

Składnia (START..END) jest obsługiwana począwszy od wersji bash 3.0+, a składnia (START..END..INCREMENT) jest obsługiwana począwszy od wersji bash 4.0+:

Do VAR W {..} Do zrobione Lub Do VAR W {....} Do zrobione Przykłady: $ dla i w (1..3); wykonaj echo $i; gotowe 1 2 3 lub $ dla i w (4..8..2); wykonaj echo $i; gotowe 4 6 8 Zliczanie możliwe jest zarówno przy zwiększaniu, jak i zmniejszaniu wartości: $ dla i in (6..-4..3); wykonaj echo $i; zrobione 6 3 0 -3

5. Podstawianie parametrów ( W "$@")

Wykonuje polecenia dla każdego parametru przekazanego do skryptu. Do VAR W $@ Do zrobione lub w jednej linii: Do VAR W $@; Do ; zrobione
Jeśli więc utworzysz skrypt test.sh #!/bin/sh Do VAR W $@ Do echo$VAR zrobione następnie po uruchomieniu z parametrami: $ ./test.sh param1 param2 param3 param1 param2 param3 Część W$@ można pominąć. Następnie skrypt test.sh zostanie przepisany: #!/bin/sh Do VAR Do echo$VAR zrobione
Podam kilka przykładów (z W i bez): $ funkcja FUNC_1 ( dla VAR w $@; wykonaj echo $VAR; gotowe; ) $ FUNC_1 param1 param2 param3 param1 param2 param3 $ funkcja FUNC_2 ( dla VAR; wykonaj echo $VAR; gotowe; ) $ FUNC_2 param1 param2 param3 param1 param2 param3

6. Używając opcji kontynuuj i przerwij pętlę for

W przypadku wszystkich powyższych konstrukcji możliwe jest użycie poleceń „kontynuuj”, aby przejść do następnego elementu pętli lub „przerwaj”, aby wyjść z pętli.

Przykład (ukończ, gdy i=6 i nie wykonuj, gdy i=3 i i=5): Do i w (1..8); Do Jeśli[ $i -równ. 6 ]; Następnie przerwa; fi Jeśli[ $i -równ. 3 ] || [ $i -równ. 5 ]; Następnie Kontynuować; fi echo $i zrobione Wynik wykonania: $ $ dla i w (1..8); wykonaj \ > if [ $i -eq 6 ]; następnie złam; fi; \ > if [ $i -eq 3 ] || [ $i -równ. 5 ]; następnie kontynuuj; fi; \ > echo $i; \ > zrobione 1 2 4

Krótki opis różnic w typach pętli:

for - wykona akcję, dopóki istnieją obiekty do wykonania (na przykład odczytanie strumienia ze standardowego wejścia, pliku lub funkcji);
while - wykonuje akcję do stan jest prawdą;
dopóki - będzie wykonywane tak długo, jak stan nie stanie się prawdą, tj. na razie to nieprawda.

Pętla FOR

Rozważmy tę wersję skryptu z pętlą:

$ cat pętli.sh #!/bin/bash dla zmiennej w `ls -1` wykonaj echo "$zmienna" zrobione

Składnia jest bardzo prosta i dość wyraźnie pokazana na przykładzie:

for (uruchamianie pętli) zmienna (deklaracja zmiennej, na której będziemy wykonywać akcje) w (wysyłanie przepływu do pętli) `ls -1` (polecenie do wykonania i przekazane do zmiennej $zmienna). Do i sporządzono to „treść” pętli, w obrębie której zostaną wykonane główne akcje na odebranych danych, a echo „$zmienna” to rzeczywista akcja wykonywana przez pętlę.

Zmieńmy teraz trochę przykład i zamiast jawnie określać polecenie, użyjemy drugiej zmiennej:

$ cat pętli.sh #!/bin/bash ls=`ls -1` dla zmiennej w $ls wykonaj echo "$zmienna" zrobione

Teraz polecenie ls -1 jest przekazywane w osobnej zmiennej, co pozwala na bardziej elastyczną pracę z pętlą. Zamiast zmiennej w pętli możesz także użyć funkcji:

$ cat pętli.sh #!/bin/bash lsl () ( ls -1 ) dla zmiennej w `lsl` wykonaj echo "$zmienna" zrobione

Głównym warunkiem pętli for jest to, że będzie ona wykonywana tak długo, jak przekazane jej polecenie zawiera obiekty do akcji. Bazując na powyższym przykładzie - o ile ls -1 ma pliki do wyświetlenia - pętla przekaże je do zmiennej i wykona „treść pętli”. Gdy tylko lista plików w katalogu się skończy, cykl zakończy swoje wykonanie.

Uczyńmy przykład nieco bardziej skomplikowanym.

Katalog zawiera listę plików:

$ ls -1 plik1 plik2 plik3 plik4 plik5 pętla.sh nofile1 nofile2 nofile3 nofile4 nofile5

Musimy spośród nich wybrać tylko te, które nie mają słowa „ NIE«:

$ cat pętli.sh #!/bin/bash lsl=`ls -1` dla zmiennej w $lsl wykonaj echo "$zmienna" | grep -v „nie” zrobione $ ./loop.sh plik1 plik2 plik3 plik4 plik5 pętla.sh

W pętli można także używać wyrażeń warunkowych ( wyrażenia warunkowe) […], aby sprawdzić warunki i instrukcję break, aby przerwać pętlę, jeśli warunek zostanie uruchomiony.

Rozważmy ten przykład:

$ cat pętli.sh #!/bin/bash lsl=`ls -1` dla zmiennej w $lsl wykonaj if [ $zmienna != "loop.sh" ] następnie echo "$zmienna" | grep -v „nie” w przeciwnym razie przerwanie fi zakończone

Pętla będzie kontynuowana aż do napotkania plikuloop.sh. Gdy tylko wykonanie pętli dotrze do tego pliku, pętla zostanie przerwana komendą break:

$ ./loop.sh plik1 plik2 plik3 plik4 plik5

Innym przykładem jest użycie operacji arytmetycznych bezpośrednio przed wykonaniem ciała pętli:

$ cat pętli.sh #!/bin/bash for ((liczba=1; liczba<11; count++)) do echo "$count" done

Tutaj ustawiamy trzy polecenia sterujące - liczba = 1, warunek kontrolny - gdy liczba jest mniejsza niż 11 i polecenie do wykonania - liczba +1:

Pętle WHILE i UNTIL

Prosty przykład, który wyraźnie pokazuje, jak działa pętla while:

$ cat pętli.sh #!/bin/bash liczba = 0 podczas [ $ liczba -lt 10 ] do ((liczba++)) echo $ liczba wykonana

Ustawiamy zmienną $count na zero, a następnie uruchamiamy pętlę whi z warunkiem „jeśli liczba $ jest mniejsza niż dziesięć, wykonaj pętlę”. W ciele pętli wykonujemy przyrost przyrostkowy+1 do zmiennej $count i wynik jest wypisywany na standardowe wyjście.

Wynik wykonania:

$ ./loop.sh 1 2 3 4 5 6 7 8 9 10

Gdy tylko wartość zmiennej $count osiągnęła 10, pętla zatrzymywała się.

Dobry przykład „nieskończonej” pętli, która pokazuje, jak działa while:

$ cat pętli.sh #!/bin/bash liczba = 10 podczas gdy [ 1 = 1 ] do ((liczba++)) echo $ liczba wykonana $ ./loop.sh ... 5378 5379 5380 5381 5382 5383 ^C

Pętla Until działa podobnie, ale w przeciwnym kierunku:

$ cat pętli.sh #!/bin/bash liczba = 0 do [ $ liczba -gt 10 ] do ((liczba++)) echo $ liczba zakończona

Tutaj ustawiamy podobny warunek, ale zamiast „kiedy zmienna jest mniejsza niż 10”, podajemy „aż zmienna stanie się większa niż 10”. Wynik wykonania:

$ ./loop.sh 1 2 3 4 5 6 7 8 9 10 11

Jeśli powyższy przykład „nieskończonej pętli” zostanie wykonany przy użyciu Until, nie wyświetli niczego, w przeciwieństwie do while:

$ cat pętli.sh #!/bin/bash liczba = 10 do [ 1 = 1 ] do ((liczba++)) echo $ liczba wykonana $ ./loop.sh $

Ponieważ " stan» pierwotnie « PRAWDA„-treść pętli nie zostanie wykonana.

Podobnie jak w pętli for, możesz używać funkcji in while i before. Na przykład pętla z rzeczywistego skryptu sprawdzającego stan serwera Kocur(PID jest pobierany z systemu SLES, może się różnić w innych systemach), wersja nieco uproszczona:

$ cat pętli.sh #!/bin/bash check_tomcat_status () ( RUN=`ps aux | grep Tomcat | grep -v grep | grep java | awk "(drukuj $2)"` ) while check_tomcat_status wykonaj if [ -n "$ URUCHOM" ], a następnie printf "OSTRZEŻENIE: Tomcat nadal działa z PID $RUN."

Wynik wykonania:

else printf „Tomcat zatrzymany, kontynuuje… nn” przerwanie zakończone

$ ./loop.sh OSTRZEŻENIE: Tomcat nadal działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa z PID 14435 26548. OSTRZEŻENIE: Tomcat nadal działa z PID 14435

Pełna wersja:

Check_tomcat_status () ( RUN=`ps aux | grep tomcat | grep -v grep | grep java | awk "(drukuj 2 $)"` ) while check_tomcat_status; wykonaj if [ -n "$RUN" ], a następnie printf "OSTRZEŻENIE: Tomcat nadal działa z PID $RUN. Zatrzymaj go? " odpowiedz "Zatrzymywanie Tomcat..." "Kontynuacja instalacji..." && $CATALINA_HOME/bin/shutdown .sh 2&>1 /dev/null || przerwać sen 2 if [ -n "$RUN" ] to printf "Tomcat nadal działa. Zabić go? " odpowiedź "Zabić Tomcat..." "Kontynuacja instalacji...n" && zabij $RUN || przerwać sen 2 fi else printf „Tomcat zatrzymany, kontynuuje… nn” przerwa fi zakończona

Funkcja odpowiedzi została opisana w artykule, ale tutaj zastosowano nieco ulepszoną wersję:

Odpowiedź () ( podczas czytania odpowiedzi; wykonaj echo case $odpowiedź w |) printf "1n $" return 0 break ;;

|) printf "2n $" zwróć 1 przerwę ;;
*) printf "Proszę wpisać T(tak) lub N(nie)!" esac gotowe )

Tutaj można było użyć zarówno while, jak i Until - ale nie pętli for, ponieważ for zadziałałoby raz (otrzymał PID i zakończył się).

A teraz kolej na piąty temat cyklu. Będę w nim dalej przyglądać się strukturom kontrolnym interpretera poleceń bash. W poprzednim poście omawiane były instrukcje warunkowe. Teraz przyszła kolej na takie integralne struktury językowe, jak operatory pętli. Pętle, podobnie jak warunki, są narzędziami zapewniającymi kontrolę nad kolejnością wykonywania poleceń.

Bash obsługuje pętle for, while, Until i Select. Przejdźmy teraz do szczegółowego rozważenia każdego z nich.
Operator pętli for
Ogólna składnia instrukcji for jest następująca:
dla zmiennej

Do
W wyniku podstawienia wzorca otrzymuje się listę słów. W każdej iteracji zmienna przyjmuje każdą kolejną wartość z tej listy i wykonywane są polecenia pomiędzy do i gotowe. Iteracje kończą się, gdy słowa na liście się wyczerpią.
$ za dzień w pon. wt. śr. czw. powtórz „Dzisiaj jest dzień $” wykonany
Zarezerwowane słowa operatora for można również zapisać w jednej linii, tak jak miało to miejsce w poprzednim poście dotyczącym operatora if. Aby to zrobić, musisz umieścić „;”. Przepiszmy poprzedni przykład biorąc pod uwagę tę możliwość:
$ za dzień w pon. wt. śr. czw.; do echo „Dziś jest $dzień”; zrobione
Brak konstrukcji jest równoznaczny z zapisem w $@. Parametr $@ został omówiony w .

Operator pętli while

Ogólna składnia instrukcji while wygląda następująco:

podczas gdy lista 1
Operator pętli for
lista2
dla zmiennej

Lista1 jest wykonywana jako pierwsza. Jeśli się powiedzie, tj. zwróci kod zero, kontrola przechodzi do listy2. Iteracje są kontynuowane, dopóki wynik wykonania listy1 nie stanie się niezerowy. Na przykład:
i=10 podczas gdy [ $i –gt 0 ]; wykonaj echo $i i=$(($i-1)) gotowe; powtórz „koniec”

Aż do operatora pętli

Ogólna składnia instrukcji Until jest następująca:

aż do listy 1
Operator pętli for
lista2
dla zmiennej

Lista1 jest wykonywana jako pierwsza. Jeśli to się nie powiedzie, to znaczy z niezerowym kodem powrotu, kontrola przechodzi do listy2. Iteracje są kontynuowane, aż wynik wykonania listy1 stanie się zerem. Na przykład:
i=10 do [ $i –lt 0 ]; wykonaj echo $i i=$(($i-1)) gotowe; powtórz „koniec”

Wybierz instrukcję pętli

Ogólna składnia instrukcji Select jest następująca:

wybierz zmienną
Operator pętli for
lista
dla zmiennej

W wyniku podstawienia wzorca otrzymuje się listę słów. Operator dodaje do tych słów numery kolejne i wysyła cały zestaw do standardowego strumienia błędów. Brak konstrukcji jest równoznaczny z zapisem w $@. Następnie wyświetlany jest monit i wiersz jest odczytywany ze standardowego wejścia. Jeżeli w wierszu znajduje się liczba odpowiadająca dowolnemu słowu z listy, to zmienna otrzymuje ją jako wartość. Jeśli nie znaleziono odpowiedniego słowa, wówczas wartość zmiennej staje się pustym ciągiem znaków. Następnie wykonywana jest lista poleceń, a iteracje są kontynuowane aż do napotkania znaku końca pliku w wierszu wejściowym lub do napotkania przerwy lub powrotu na liście poleceń.
Polecenia break i return kontrolują postęp pętli. Polecenie break przerywa wykonanie pętli, natomiast return zwraca kod wyniku (null lub różny od zera).
Instrukcja Select jest przydatna do tworzenia numerowanych menu. Przykładowo w katalogu ~/temp znajdują się 3 pliki: proto.txt, file.txt i readme. Przykład fragmentu skryptu umożliwiającego szybkie przeglądanie dowolnego z nich.
echo "Wybierz plik do wyświetlenia:" wybierz plik w ~/temp/* Zakończ; wykonaj, jeśli [ -f $plik ]; następnie cat $file; inaczej przerwa; gotowe
Uruchamiając ten skrypt, na ekranie zobaczymy:
Wybierz plik do wyświetlenia:
1) /home/istergul/temp/file.txt
2) /home/istergul/temp/proto.txt
3) /home/istergul/temp/readme
4) Zrezygnuj

W następnym temacie przyjrzymy się warunkowym podstawieniom parametrów. Czekam z niecierpliwością na Twoje komentarze.

Pętle są rzeczą niezwykle wygodną przy pisaniu dowolnych programów czy skryptów, wręcz niezbędną. Pozwalają nam wykonać określoną sekcję kodu określoną liczbę razy. Naturalnie, bash ma kilka rodzajów pętli. Opiszemy cykle na, na, podczas, do. Chociaż for in i for są uważane za różne składnie tej samej instrukcji, moim zdaniem różnią się one od siebie bardziej niż while od do.

Pętla z licznikiem dla wejścia:

Cykl za w To jest pętla z licznikiem. Blok kodu znajdujący się w ciele pętli jest powtarzany tyle razy, ile jest wartości zawartych na liście operatora for in i przy każdym powtórzeniu zmienna licznika (tutaj nazywa się to var, ale oczywiście możesz to nazwać jak chcesz) ma wartość następnego elementu listy.
Jeżeli słowo kluczowe do znajduje się w tej samej linii co słowo for, to po liście argumentów (przed wykonaniem) należy postawić średnik.
Każdy z elementów<список>może zawierać kilka argumentów. Jest to przydatne podczas przetwarzania grup parametrów. W tym przypadku, aby wymusić analizę każdego z argumentów w<списке>, musisz użyć instrukcji set
Możesz użyć zmiennej jako listy w pętli for.
W<списке>W pętli for można używać nazw plików, które z kolei mogą zawierać znaki wieloznaczne. Może to być bardzo przydatne podczas pracy z dużą liczbą plików.
Jeśli<список>nie jest określony w pętli for, wówczas używana jest jako zmienna $@ - lista argumentów wiersza poleceń.
Tworząc listę argumentów, możesz użyć podstawienia poleceń w pętli for.
Wyjście pętli można przekierować ze standardowego wyjścia do pliku lub gdziekolwiek indziej (więcej informacji na ten temat można znaleźć w artykule Przekierowanie we/wy).

Składnia:
dla var w<список>
Do
<выполняемые команды>
zrobione

Przykład:
dla nazw w nazwie1 nazwa2 nazwa3 nazwa4
Do
echo $imion
zrobione

Operator pętli Do ma inny sposób zapisu - bardzo podobny do składni operatora for w języku C. W tym przypadku podczas inicjalizacji liczników ustawiane są początkowe wartości zmiennych lub jednej zmiennej i po każdym przejściu pętli warunek. jest zaznaczone, jeśli sprawdzenie zwróci wartość true, rozpoczyna się następny przebieg pętli. W bloku<приращение счётчиков>wartość naszych liczników zmiennych musi koniecznie się zmienić (niekoniecznie w górę), aby przy sprawdzaniu warunku prędzej czy później otrzymaliśmy wartość false, w przeciwnym razie pętla nigdy się nie skończy. Bardzo wygodna i, co najważniejsze, znana opcja, jeśli jakakolwiek operacja wymaga powtórzenia określoną liczbę razy.

Z podobną składnią:
Do ((<инициализация счётчиков>; <проверка условия>; <приращение счётчиков>))
Do
<выполняемые команды>
zrobione

Przykład:
dla ((zmienna=1; zmienna<= LIMIT ; var++))
Do
echo $zmienna
zrobione

pętla while:

Jest to dość prosta konstrukcja, która sprawdza stan za operatorem chwila i jeśli ten warunek jest spełniony, wykonuje blok poleceń znajdujący się pomiędzy słowami do i gotowe, a następnie ponownie przystępuje do sprawdzania warunku. Jeżeli sprawdzenie zwróci wartość false, cykl się kończy i rozpoczynają się wykonywanie następujących poleceń: zrobione. Koniecznie należy to zapewnić<проверка условия>zależy od kodu działającego w pętli; w przeciwnym razie, jeśli wynik sprawdzenia się nie zmieni, otrzymasz nieskończoną pętlę.
Standardowe urządzenie wejściowe dla pętli while można przekierować do pliku za pomocą polecenia redirection< в конце цикла.

Składnia:
chwila<Проверка условия>
Do
<Блок команд, обязательно меняющий переменные влияющие на проверку условия>
zrobione

Przykład:
podczas gdy [ $var0 -eq 100 ]
Do
echo $zmienna
zmienna++
zrobione

Operator chwila może mieć kilka warunków. Ale dopiero ostatni z nich przesądza o możliwości kontynuacji cyklu. W takim przypadku składnia operatora pętli będzie inna niż zwykle.
Składnia(Powtarzam jeszcze raz, że tylko ostatni warunek wpływa na wykonanie pętli) :
chwila
<условие1>
<условие2>

<условиеN>
Do
<выполняемые команды - тело цикла>
zrobione

Do pętli:

Operator dopóki jest bardzo podobny do while, również ocenia warunek, ale wykonuje treść pętli, jeśli wynik obliczeń jest fałszywy. Może się to wydawać niezwykłe, ale dopóki nie oceni warunku przed pierwszym przebiegiem pętli, na przykład while, a nie po nim. Podobnie jak w przypadku pętli for/in, umieszczając słowo kluczowe do w tym samym wierszu, co deklaracja pętli, należy wstawić znak „;”. zanim to zrobisz.
Podobnie jak w poprzednim przypadku należy pamiętać, że warunek musi zależeć od operacji w treści pętli, w przeciwnym razie nasz skrypt nigdy nie zostanie ukończony.

Składnia:
dopóki<Проверка условия>
Do
<Блок команд, обязательно меняющий переменные влияющие на проверку условия>
zrobione

Przykład:
aż [ $var0 -gt 100] # Warunek jest sprawdzany na początku iteracji.
Do
echo $zmienna
var--
zrobione

To chyba na razie wystarczy. :)

  • Z powrotem
  • Do przodu

Nowe artykuły:

  • Wykrywanie sieci nie włącza się w systemie Windows 7/8/2008/2012
  • Błąd: Nie udało się uruchomić tej aplikacji, ponieważ nie mogła znaleźć lub załadować wtyczki „Windows” platformy Qt.
  • Konfigurowanie automatycznego ponownego uruchamiania procesów roboczych rphost.exe na serwerze 1C 8.3
  • Jak zmniejszyć rozmiar dziennika transakcji (.ldf) w MS SQL 2008/20012

    MS SQL, jak każdy porządny przemysłowy system DBMS, wraz z bazą danych, prowadzi logi transakcyjne, które pozwalają na przywrócenie stanu...

W tym wykładzie kontynuujemy zapoznawanie się grzmotnąć. Przypominam, że rozważamy właśnie te elementy grzmotnąć, co pomoże nam zrozumieć skrypty systemu operacyjnego. Takimi elementami są z pewnością pętle i funkcje. Jeśli ktoś studiował programowanie, nie będzie miał trudności ze zrozumieniem tych pytań.

dla pętli

Cykl Do V grzmotnąć ma dwa typy. Przyjrzyjmy się najpierw wersji klasycznej Do. Ogólny pogląd jest następujący:

Pomiędzy elementami Do I W ustawiana jest zmienna, która z kolei przyjmuje wartość z ciągu wartości określonych pomiędzy W I Do. Między Do I zrobione istnieją polecenia, które są wykonywane za każdym razem, gdy zmienna zmienia swoją wartość. Pętla kończy się, gdy zmienna przyjmuje ostatnią wartość z sekwencji. Wartości w sekwencji oddzielane są spacjami.

Oto praktyczny przykład:

Sekwencję wartości można określić na różne sposoby. Jawnie - jak w powyższym przykładzie lub przy użyciu innych zmiennych lub przy użyciu specjalnych poleceń. Spójrzmy na kilka przykładów. Ponieważ wartości są podawane oddzielone spacjami, wartościami takimi może być dowolna zmienna zawierająca ciąg znaków ze spacjami:

Wynik będzie taki sam jak w pierwszym przykładzie.

Jeśli chcesz określić ciąg liczb, możesz użyć polecenia nast oraz mechanizm substytucyjny. Zespół nast zwraca na ekran ciąg wartości numerycznych. Składnia jest prosta i będzie jasna na podstawie poniższego przykładu:

Wynik:

Wróćmy do drugiego typu Do. Często w skryptach można spotkać tzw. wariant C Do, który jest używany w pętlach liczbowych. Rzućmy okiem na przykład:

Pętla działa tak długo, jak testowany warunek w wyrażeniu jest prawdziwy. Gdy tylko wyrażenie zwróci wartość false, wykonywanie pętli zostanie zatrzymane.

Praktyczny przykład:

#!/bin/bash
ja=1
podczas gdy [ $i -lt 7 ]
Operator pętli for
echo $i
niech i=i+1
zrobione

W naszym przykładzie sprawdzamy, czy zmienna I jest mniejsza niż (-lt) liczba 7 i jeżeli tak, to na ekranie wyświetlana jest wartość zmiennej. Wyrażenie niech i=i+1, zwiększa zmienną o jeden, sprawdza ponownie itp. let mówi interpreterowi, że argumenty powinny być rozpoznawane jako wartości liczbowe. Linię tę można zapisać jako niech ja++(wariant podobny do c). Gdy liczba wzrasta o więcej niż jeden, można to zapisać w następujący sposób: niech ja+=2- w tym przypadku I będzie zwiększany o 2. Inną opcją zwiększania zmiennej jest użycie wbudowanego kalkulatora (działa tylko z liczbami całkowitymi). Dostęp do kalkulatora można uzyskać poprzez podwójne nawiasy: i=$(($i+1)) lub przez kwadratowe: i=$[$i+1] Możesz także użyć kalkulatora w wierszu poleceń:

Trzeba uważać z pętlami, żeby nie skończyć się pętlą nieskończoną. Przy okazji do debugowania grzmotnąć skrypty, na które możesz zmienić pierwszą linię #!/bin/bash -x lub uruchom skrypt za pomocą polecenia bash -x:

igor@ubuntu:~/linux$ bash -x ./testfor.sh
+ ja=1
+ „[„ 1 -gt 5 „]”
+ echo i=1
ja=1
+ niech i=i+1
+ „[„ 2 -gt 5 „]”
+ echo i=2
ja=2
+ niech i=i+1
+ „[„ 3 -gt 5 „]”
+ echo i=3
ja=3
+ niech i=i+1
+ „[„ 4 -gt 5 „]”
+ echo i=4
ja=4
+ niech i=i+1
+ „[„ 5 -gt 5 „]”
+ echo i=5
ja=5
+ niech i=i+1
+ „[„ 6 -gt 5 „]”

Pamiętaj, aby poćwiczyć pisanie małych skryptów, aby ugruntować swoją wiedzę na temat działania pętli grzmotnąć.

Funkcje w bashu

Funkcje są używane w grzmotnąć bardzo szeroki. Funkcje opisuje się na dwa sposoby: za pomocą słowa kluczowego funkcjonować i bez tego.

Pierwszy sposób:

funkcja nazwa_funkcji
{
ciało funkcyjne
}

Drugi sposób:

nazwa_funkcji()
{
ciało funkcyjne
}

Funkcja jest wywoływana po nazwie w dowolnym miejscu skryptu, ale dopiero po opisaniu samej funkcji. Do funkcji można również przekazywać parametry, które są oddzielane spacją po wywołaniu funkcji (nazwie). Spójrzmy na przykładowy skrypt grzmotnąć:

#!/bin/bash
podkład funkcyjny
{
jeśli [ $# -ne 0 ]
Następnie
lokalny a=1
echo "Liczba przekazanych parametrów - $#"
dla mnie w $@
Operator pętli for
echo "$a-tym parametrem jest $i"
niech +
zrobione
zwróć 0
w przeciwnym razie
echo „Nie przekazano parametrów”
powrót 1
fi
}
echo „Wywołaj funkcję z parametrami:”
elementarz a b c
powtórzyć $?
echo „Wywołaj funkcję bez parametrów:”
elementarz
powtórzyć $?

W tym przykładzie funkcja o nazwie elementarz. Wywołanie funkcji z parametrami: elementarz a b c i bez parametrów: elementarz. W ciele funkcji wszystkie konstrukcje powinny być Ci znane, z wyjątkiem $# , $tj I $@ .$# — zwraca liczbę parametrów przekazanych do funkcji. W naszym przykładzie będzie to liczba 3 .$@ zwraca wszystkie parametry w jednej linii. W przykładzie tak a b c. I przez $1 , $2 , $3 itp. Dostęp do każdego parametru można uzyskać indywidualnie. $? — zawiera kod wykonania ostatniego polecenia. W naszym przykładzie kod wykonania funkcji.

Funkcja może również zwrócić wartość liczbową za pomocą słowa kluczowego powrót. Zwykle zwracają 0, jeśli funkcja została wykonana bez błędów, lub wartość różną od zera, jeśli coś poszło nie tak. W przykładzie, jeśli funkcja została wywołana z parametrami, zwracana jest wartość 0, a jeśli funkcja została wywołana bez parametrów, zwracany jest kod 1.

Wszystko, co dotyczy przekazywania parametrów do funkcji, działa dokładnie tak samo w przypadku skryptu. Możesz także przekazywać parametry do skryptu i manipulować nimi w ten sam sposób, używając $#, $@, $N. Z tej samej kategorii jest opcja - $0 - która zwraca nazwę polecenia, które uruchomiło skrypt. Jeśli skrypt został uruchomiony za pomocą polecenia ./script.sh, potem echo $0 zwróci wartość ./script.sh, a jeśli na polecenie /home/igor/linux/script.sh, wówczas wartość zostanie zwrócona /home/igor/linux/script.sh.



Jeśli zauważysz błąd, zaznacz fragment tekstu i naciśnij Ctrl+Enter
UDZIAŁ: