Bash, skrypty. Wojciech Dudek. 15 listopada Uniwersytet Warszawski

Podobne dokumenty
Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Bash - wprowadzenie. Bash - wprowadzenie 1/39

System operacyjny Linux

Skrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012

12. Skrypty w Linux - funkcje, instrukcje sterujące i obliczenia arytmetyczne

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

1 Przygotował: mgr inż. Maciej Lasota

Programowanie skryptów powłoki

Środowisko programisty Zestaw 7

Powłoka interpreter poleceń systemu UNIX

Powłoka (shell) Powłoka ksh

Systemy operacyjne 11

Wstęp do Informatyki dla bioinformatyków

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

Wprowadzenie do programowania w powłoce

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Powłoka bash. Kurs systemu Unix 1

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Technologie Informacyjne - Linux 3

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Instrukcja SO powłoka BASH i skrypty powłoki Istotne jest zrozumienie działania narzędzia history powłoki BASH. Każde polecenie wprowadzone i

Systemy operacyjne. Programowanie w shellu: BASH. Wydział Inżynierii Metali i Informatyki Przemysłowej

Pracownia Komputerowa wykład III

Zmienne środowiskowe: Ścieżka przeszukiwana komendą.

1 Podstawy c++ w pigułce.

Interpreter poleceń oraz zmienne środowiskowe

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie

PODSTAWY INFORMATYKI

- wszystkie elementy - wszystkie elementy

Tworzenie skryptu: Skrypty powłoki

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Skrypty powłoki w systemie Linux

Cw.12 JAVAScript w dokumentach HTML

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania w Bash'u

LibreOffice Calc VBA

Ćwiczenie 1. Wprowadzenie do programu Octave

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

Podstawy Programowania Podstawowa składnia języka C++

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

1 Podstawy c++ w pigułce.

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

Architektura systemów informatycznych. Powłoka systemowa Architektura procesora

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

4. Funkcje. Przykłady

skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: pierwsza linia określa powłokę, w której wykonywany jest skrypt; druga to komentarz

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Przekierowanie wejścia wyjścia:

Języki i paradygmaty programowania

Ćwiczenie 1. Wprowadzenie do programu Octave

Kurs pisania skryptów w powłoce BASH

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Podstawy programowania skrót z wykładów:

Skrypty startowe. Tryb interaktywny tryb logowania: nie logowanie: Tryb nieinteraktywny

Wprowadzenie do Scilab: podstawy języka Scilab

Wprowadzenie do programowania shella (bash)

Wstęp do programowania

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

Podstawy programowania w języku C

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Algorytmika i Programowanie VBA 1 - podstawy

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Podstawy programowania w języku C i C++

Przetwarzanie sygnałów

Podstawy informatyki

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Warunki logiczne instrukcja if

Mikrokontroler ATmega32. Język symboliczny

Programowanie w BASH u Skrypt do ćwiczeń

Ćwiczenie: JavaScript Cookies (3x45 minut)

Odczyt danych z klawiatury Operatory w Javie

Ćwiczenie nr 14: System Linux

7. Pętle for. Przykłady

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Instrukcje. Operatory. Operatory. Instrukcje sterujące. wyrażenie1 && wyrażenie2 ;

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

WHILE (wyrażenie) instrukcja;

Wstęp do Programowania Lista 1

Właściwości i metody obiektu Comment Właściwości

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Pętla for. Wynik działania programu:

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

ZMIENNE. Podstawy PHP

Transkrypt:

Bash, skrypty. Wojciech Dudek Uniwersytet Warszawski 15 listopada 2007

Pierwszy skrypt hello.sh #!/bin/bash # Progam z radością wita świat. echo "Hello world" # Tekst powitania Rozszerzenie sh jest standartowym rozszerzeniem skryptów powłoki. Nie jest ono konieczne, dlatego jest często pomijane (lub zmieniane) szczególnie w sytuacjach kiedy skrypt pracuje jako polecenie. Pierwszy wiersz jest istotny. Mówi jak ma być uruchomiony ten skrypt. Skrypt zaczynający się dokładnie od #!/bin/perl byłby interpretowany przez perla By uruchomić skrypt użytkownik musi mieć uprawnienia do uruchamiania go. Komentarze zaczynamy znakiem # Wszystkie pozostałe znaki aż do końca linii są ignorowane w interpretacji skryptu.

Polecenie Polcenie jest jednym z poniższym: polecenie proste polecenie złożone

Przypisanie Przypisanie w bashu ma postać: <przypisanie> = <nazwa>=[<wartosc>] Jeżeli nie podano wartości, to zmiennej przypisywany jest napis pusty Napis wartość jest poddawany interpretacji i podstawieniom (tylda, parametry, zmienne, wyniki poleceń, wyrażenia arytmetyczne i cytowania); Jest to dość skomplikowane. Podstawienie (!nie przypisanie!) wartości zmiennej i to $i zmienna może mieć atrybuty (liczba całkowita, tablica...) ustalane poleceniem declare

Polecenie proste <lista_przypisan> = <przypisanie1>[ <przypisanie2>...] <polecenie_proste> = [<lista_przypisan>] [<słowa>] [<przekierunkowanie>] Słowa są oddzielone spacjami. Pierwsze słowo z <słowa> wskazuje na polecenie które będzie wykonane (nazwa programu, nazwa funkcji lub polecenie wbudowane). Pozostałe to argumenty. Jeżeli nie ma nazwy polecenia, to przypisania zmiennych dotyczą środowiska aktualnej powłoki. W przeciwnym wypadku, zmienne są dodawane do środowiska wykonywanego polecenia i nie mają wpływu na środowisko bieżącej powłoki. Polecenie też jest interpretowane (działają m.in. podstawienia)

Polecenie proste - cd. Próby uruchomienia polecenia wykonywane są w następującej kolejności Jeżeli nazwa programu zawiera ukośnik, to uruchamiany jest program. Funkcja Polecenie wbudowane Program ze ścieżką dostępu zdefiniowanej w zmiennej $PATH Czyli poprzez zdefiniowanie funkcji możemy podmienić polecenie-program, jeżeli nie jest wpisany explicite.

Przykład t= x=ala y="hello world" z="hello $y" echo $t $x $y echo =z echo= z Ponieważ pwd jest poleceniem wypisującym zmienną PWD, to: PWD=/ pwd PWD=/usr/bin pwd pwd i mamy inny sposób na zmianę katalogu bieżącego. >./tmp.txt szybkie tworzenie pustego pliku

Niebanalny przykład f() { echo i=$i j=$j; i=3; } prog=f i=4 j= i=2 j=$i+3 $prog 2>/dev/null echo i=$i j=$j i=2 j=2+3 i=4 j= Co będzie jeżeli przed $prog wstawimy średnik?

Uwaga Przeważnie omija się albo listę przypisań albo słowa i przekierowanie. W ten sposób wydaje się, że polecenie proste, to albo przypisanie, albo zwykłe polecenie z przekierowaniem.

Interpretacje Istnieje siedem rodzajów wykonywanych interpretacji (wg. kolejności): interpretacja nawiasów chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} interpretacja tyld ~uzytkownik podstawianie parametrów $zmienna ${paramer}, ${paramer:offset:dlugosc} interpretacja zmiennych i wyrażeń arytmetycznych $(( 4 + 5 * 8 + j )) podstawianie wyników poleceń $( basname "ala.txt" ".txt" ) echo a podział na słowa rozwijanie nazw ścieżkowych *? $ls *

Potok <potok> = [time [-p]] [!] <polecenie> [ <polecenie2>...] Ustanawiane jest połączenie za pomocą potoku; wyjście polecenia jest łączone wejściem polecenia2. Kodem zakończenia potoku jest kod zakończenia ostatniego polecenia. Znak! powoduje negację kodu zakończenia całego potoku. time powoduje wypisanie czasów wykonania potoku. -p zmienia format wypisywania czasów wykonania.

Lista <potok1> [<operator> <potok2>...] [; & <nowalinia> ] Operatorem jest &&,, &, ; Potok zakończony & jest uruchamiany w tle w podpowłoce i powłoka macierzysta nie czeka na jego zakończenie. Kod zakończenia to 0. Potoki oddzielane ; są uruchamiane synchronicznie i sekwencyjnie A; B uruchamiany jest A, a po jego zakończeniu B Potoki oddzielone && / są synchronicznymi leniwymi listami AND / LUB A && B B jest uruchamiany wtw. gdy kod zakończenia A to 0. A B B jest uruchamiany wtw. gdy kod zakończenia A jest różny od 0. Kod zakończenia list &&,, ; jest kodem zakończenia ostatniego wykonanego potoku. ciąg znaków <nowalinia> zastępuje ;

Przykład fpc prog.pas &&./prog find. -name a*.txt >./wynik & find. -mtime 1 grep.txt { echo a echo b echo c; echo d }

Polecenie złożone Polecenie złożone to jedno z poniższych: ( lista ) { lista; } (( wyrażenie )) [[ wyrażenie ]] for nazwa [ in slowo ] ; do lista; done for (( wyr1 ; wyr2 ; wyr3 )) ; do lista; done select nazwa [ in slowo ] ; do lista; done case slowo in [ [(] wzorzec [ wzorzec]... ) lista ;; ]...esac if lista; then lista; [elif lista; then lista; ]... [else lista; ] fi while lista; do lista; done until lista; do lista; done [function] nazwa () { lista; }

Uwaga lista; - oznacza listę zakończoną ; Oczywiście ; można zastąpić znakiem nowej linii. Średnik może też być też czasami pominięty. Kiedy? ; lub polecenie; ; jest błędem - nie ma pustych instrukcji.

( lista ) Wykonywana jest w podpowłoce. Przypisania zmiennych i polecenia wbudowane wpływające na środowisko powłoki nie zachowują swoich skutków po zakończeniu polecenia. Zwracanym kodem jest kod zakończenia listy. ( cd /tmp ); pwd

{ lista; } - polecenie grupowania lista jest po prostu wykonywana w bieżącym środowisku powłoki. Zwracanym kodem jest kod zakończenia listy. Należy pamiętać, że w przeciwieństwie do metaznaków ( i, { i } są słowami zastrzeżonymi i aby zostały rozpoznane muszą się pojawić tam, gdzie dozwolone jest użycie słów zastrzeżonych. Ponieważ nie powodują podziału na słowa, muszą być oddzielone od listy za pomocą białego znaku.

(( wyrażenie )) - polecenie wyrażenie arytmetyczne wyrażenie interpretowane jest zgodnie z zasadami obliczania wyrażeń arytmetycznych. Jeśli wartość wyrażenia jest niezerowa, to kodem zwracanym jest 0; w przeciwnym razie kodem zwracanym jest 1. Jest to ściśle równoważne konstrukcji let wyrażenie

wyrażenia arytmetyczne Obliczenia wykonywane są na długich liczbach całkowitych (long integer). Interpretacja parametrów przeprowadzana jest przed obliczeniem wyrażenia. Wewnątrz wyrażenia, do zmiennych powłoki można się też odwoływać przez nazwę, bez użycia składni interpretacji parametrów. Gdy wystąpi odwołanie się do zmiennej, jej wartość obliczana jest jako wyrażenie arytmetyczne. Istnieje podstawienie arytmetyczne $(( wyr )). Liczone wg. zasad wyrażeń arytmetycznych. (( jj = i + $i + 4 )) ; echo $jj echo $(( 45 + jj ))

operatory wyrażenia arytmetycznego Kolejność na liście wg. priorytetu. id++ id-- (post-inkrementacja i post-dekrementacja) ++id --id (pre-inkrementacja i pre-dekrementacja) - + (znak)! ~ (negacja logiczna i bitowa) ** (potęgowanie) * / \% (mnożenie, dzielenie, reszta z dzielenia ) + - (dodawanie, odejmowanie) << >> (lewo i prawostronne przesunięcie bitowe ) <= >= < > (porównanie ) ==!= (równości i nierówność ) & (bitowe AND) ^ (bitowe XOR) (bitowe OR) && (AND) (OR) wyr1?wyr2:wyr3 (obliczenie warunkowe) = *= /= %= += -= <<= >>= &= \^= = (przypisanie) wyr1, wyr2 (przecinek)

[[ wyrażenie ]] - polecenie wyrażenie warunkowe wyrażenie interpretowane jest zgodnie z zasadami obliczania wyrażeń warunkowych Zwraca kod 0 lub 1 w zależności od interpretacji wyrażenia warunkowego. Na słowach wyrażenia nie są wykonywane rozwinięcia nazw plików ani podział na słowa (reszta jest wykonywana - czyli arytmetyczne, podstawiania, itp.) Gdy używane są operatory == i!=, łańcuch na prawo od operatora traktowany jest jak wzorzec i dopasowywany! jako zaprzeczenie ( ) zmiana kolejności &&, operator AND i LUB podobnie jak w liście

wyrażenie warunkowe Używane przez polecenie [[ ]], polecenie test i polecenie wbudowane [ ] Używane do testowania atrybutów pliku i wykonywania porównań łańcuchowych i arytmetycznych. plik jest nazwą pliku lub nazwą deskryptora (/dev/stdin, /dev/stdout, /dev/stderr,...) n="ala.txt" if [[ -a "$n" ]] ; then echo plik $n istnieje else echo nie ma pliku $n ; fi test -f "zbys.txt" && echo jest

opcje wyrażeń warunkowych -a plik Prawda jeśli plik istnieje. -b plik Czy istnieje i jest blokowym plikiem specjalnym. -c plik Czy istnieje i jest znakowym plikiem specjalnym. -d plik Czy istnieje jest katalogiem. -e plik Prawda jeśli plik istnieje. -f plik Czy istnieje i jest plikiem zwykłym. -g plik Czy istnieje i ma ustawiony bit set-group-id. -h plik Czy istnieje i jest dowiązaniem symbolicznym. -k plik Czy istnieje i ma ustawiony bit ochrony (sticky bit). -p plik Czy istnieje i jest potokiem nazwanym (FIFO). -r plik Czy istnieje i daje się czytać. -s plik Czy istnieje i ma rozmiar większy niż zero. -t fd Prawda jeśli deskryptor pliku fd jest otwarty i odnosi się do terminala. -u plik Czy istnieje i ma ustawiony bit set-user-id. -w plik Czy istnieje i daje się doń zapisać. -x plik Czy istnieje i jest wykonywalny. -O plik Czy istnieje i jego właścicielem jest efektywny id użytkownika. -G plik Czy istnieje i jego właścicielem jest efektywny id grupy. -L plik Czy istnieje i jest dowiązaniem symbolicznym. -S plik Czy istnieje i jest gniazdem. -N plik Czy istnieje i być zmieniany od czasu ostatniego jego odczytu.

opcje wyrażeń warunkowych plik1 -nt plik2 Prawda jeśli plik1 jest nowszy (według daty modyfikacji) od pliku2. plik1 -ot plik2 Prawda jeśli plik1 jest starszy niż plik2. plik1 -ef plik2 Prawda jeśli plik1 i plik2 mają ten sam numer urządzenia i i-węzła. -z napis Prawda jeśli długość napisu wynosi zero. -n napis Prawda jeśli napis ma długość niezerową. napis1 == napis2 Czy napisy są równe. Zamiast == można użyć =. napis1!= napis2 Czy napisy są różne. napis1 < napis2 i napis1 > napis2 Porównanie kolejności leksykograficznej. arg1 OP arg2 OP jest jednym z operatorów arytmetycznych -eq (równe), -ne (różne), -lt (mniejsze), -le (mniejsze równe), -gt (większe) lub -ge (większe równe). arg1 i arg2 mogą być dodatnimi lub ujemnymi liczbami całkowitymi.

for nazwa [ in slowo ] ; do lista; done Interpretowane są słowa następujące po in, tworząc listę elementów. Zmiennej nazwa nadawana jest kolejno wartość każdego elementu tej listy i każdorazowo wykonywana jest lista poleceń. Jeżeli pominięto in słowo, to polecenie for wykonuje listę po jednym razie dla każdego ustawionego parametru pozycyjnego ($1, $2...). Zwracanym kodem jest kod zakończenia ostatniego wykonanego polecenia. Jeśli interpretacja elementów następujących po in daje w wyniku pustą listę, to nie są wykonywane żadne polecenia i zwracany jest kod 0.

for - przykład for i in ala ma kota ; do echo " $i " done for i in $(seq 1 100) ; do echo $i; done for i in seq 1 10 ; do echo $i; done for i in * ; do echo $i ; ls -l $i ; done

for (( init ; warunek ; post mod )) ; do lista; done Lista w stylu C. Na początku obliczane jest wyrażenie arytmetyczne init, jako wyrażenie arytmetyczne. Następnie wielokrotnie obliczane jest warunek, aż do osiągnięcia przez nie wartości zero. Każdorazowo gdy obliczone warunek jest niezerowe, wykonywana jest lista i obliczane jest wyrażenie arytmetyczne post mod. Jeśli pominięto któreś z wyrażeń, to zachowuje się ono tak, jakby przyjmowało wartość 1. Zwracanym kodem jest kod zakończenia ostatniego wykonanego polecenia listy, lub fałsz jeśli któreś z wyrażeń jest niepoprawne.

for w stylu C - przykład for (( i=1 ; i <= 10 ; i++ )) ; do j=${i}.txt; echo " $j " touch $j done

select nazwa [ in slowo ] ; do lista; done Interpretowana jest lista słów następujących po in, tworząc listę elementów. Zestaw zinterpretowanych słów wypisywany jest na standardowym wyjściu, każde poprzedzone liczbą kolejną. Jeśli pominięto in słowo, to wypisywane są parametry pozycyjne. Następnie wyświetlana jest zachęta PS3 i czytany jest wiersz ze standardowego wejścia. Jeżeli wiersz składa się z liczby odpowiadającej jednemu z wyświetlonych słów, to zmiennej nazwa przypisywana jest wartość tego słowa. Jeśli wiersz jest pusty, słowa i zachęta wyświetlane są ponownie. Jeżeli odczytano EOF, to polecenie kończy pracę. Każda inna wartość powoduje, że nazwie zostanie przypisany łańcuch pusty. Odczytany wiersz zachowywany jest w zmiennej REPLY. lista wykonywana jest po każdym wyborze, dopóki nie zostanie wykonane polecenie break.

case slowo in [ [(] wzorzec [ wzorzec]... Najpierw interpretuje słowo i próbuje dopasować uzyskany wynik do każdego z wzorców po kolei, posługując się tymi samymi regułami dopasowywania, co dla rozwijania nazw ścieżkowych ( *,?, itp.). Gdy znalezione zostanie dopasowanie, wykonywana jest odpowiadająca mu lista. Jeśli żaden ze wzorców nie pasuje do kodem zakończenia jest zero. W przeciwnym razie jest równy kodowi zakończenia ostatniego z wykonanych poleceń listy.

read - wewnętrzne polecenie czytania read [-u fd] [-p tekst] nazwa1 nazwa2...nazwal read wczytuje wiersz ze standardowego wejścia (opcja -u zmienia wejście) Pod zmienną nazwa1 jest wczytywane pierwsze słowo, pod zmienną nazwa2 drugie słowo, itp. To co zostanie jest wczytywane do nazwal Jeżeli nie podano żadnej nazwy cały wiersz wczytywany jest do zmiennej REPLY Opcja -p pozwala ustalić napis zachęty. Jeżeli koniec pliku, to read kończy się z kodem 1 (wpw. 0). man bash lub help read

Ćwiczenie Napisz program, który w zależności od opcji, albo czyści terminal (-c), albo wypisuje zawartość pliku (-p plik), albo wypisuje dzisiejszą godzine i datę (bez opcji). Napisz program, który wczytuje linię ze standardowego wejścia; następnie traktuje je jako wyrażenie arytmetyczne i je oblicza. Napisz program, który wczytuje dane z pliku dane.txt ; każda linia to nowe wyrażenie; wyniki w pliku wyniki.txt.

while lista1; do lista2; done i until lista3; do lista4; done Polecenie while powtarza wykonywanie listy2 tak długo, jak długo ostatnie polecenie listy1 zwraca zerowy kod zakończenia. Dla until lista3 wykonywana jest tak długo, jak długo ostatnie polecenie listy4 zwraca niezerowy kod zakończenia. Kod zakończenia poleceń while i until jest równy kodowi zakończenia ostatniego z wykonanych poleceń listy do lub zeru jeśli żadne nie zostało wykonane.

break i continue Są dostępne w pętlach i poleceniu select. break powoduje natychmiastowe przerwanie wykonywanej pętli. continue powoduje zakończenie aktualnej iteracji pętli i przejście do następnej iteracji. while true; do read b if [[ "$a" == "koniec" ]] then break else continue fi done

[function] nazwa () { lista; } - definicja funkcji Argumenty funkcji dostępne są jako parametry pozycyjne ($1, $2..) i specjalne ( $...) Ponieważ definicja jest poleceniem, istotna jest kolejność definiowania i można wstawiać definicje tam gdzie polecenia (działa zagnieżdżanie niebezpieczne). Kod zakończenia jest równy kodowi zakończenia ostatniego z wykonanych poleceń listy. Możemy zakończyć wykonywanie funkcji z kodem n używając return n. f() { g() { echo a; return 2; } ; g; } g f g

Ćwiczenie Napisz program, który udaje logina i zapisuje hasła w pliku i wysyła je pocztą (man mail). Napisz program, który pobiera dwa argumenty n1 i n2 i zamienia wszystkie pliki w katalogu bieżącym o nazwie *.n1 na *.n2. Napisz program który wczytuje dane z pliku dane.txt ; każda linia to nowe wyrażenie; wyniki w pliku wyniki.txt. Napisz skrypt, który tworzy plik index.html w html u z listingiem plików (widzialnych) w katalogu bieżącym. Obrazki mają miniaturki (man convert) w katalogu./.img_id, gdzie id jest unikatowym identyfikatorem.