'

Jerzy

Sobczyk

$

'

Jerzy

Sobczyk

$

Filtry

stdin

stdout

filter

1

0

Grupowy opis plików

2 stderr

• * dowolny ciąg znaków

• ? dowolny znak

stdin

stdout

• [...] dowolny znak z klasy

stdin

stdout

stdin

stdout

stdin

stdout

filter

filter

filter

•

0

1

0

1

0

1

[a-z] dowolny znak pomiędzy a i z

1

0

2 stderr

2 stderr

2 stderr

• [!...] dowolny znak spoza klasy

2 stderr

ps -ef | grep jurek | wc -l

1

3

&

19

padziernika

1998

roku

SHELL

ASU

%

&

19

padziernika

1998

roku

SHELL

ASU

%

'

Jerzy

Sobczyk

$

'

Jerzy

Sobczyk

$

Kierowanie wejścia/wyjścia

Zmienne

• > – skierowanie wyjścia

PATH – ścieżka poszukiwań komend

• 2> – skierowanie błędów

HOME – katalog użytkownika

• < – kirowanie wejścia

MAIL – skrzynka pocztowa użytkownika

• >> – skierowanie wyjścia (dopisywanie) SHELL – nazwa powłoki

•

PS1 – znak zachęty

| – skierowanie wyjścia jednego programu na wejście drugiego

• 2>&1 – skierowanie błędów na standardowe wyjście PS2 – znak zachęty (używany przy kontynuowaniu komendy) 2

4

&

19

padziernika

1998

roku

SHELL

ASU

%

&

19

padziernika

1998

roku

SHELL

ASU

%

'

Jerzy

Sobczyk

$

'

Jerzy

Sobczyk

$

Argumenty

• $0 – nazwa komendy

Znaki specjalne

• $1 – pierwszy argument

• $i – i-ty argument

• $* – wszystkie argumenty z wyjątkiem $0 jako jeden łańcuch Znaki specjalne: ; & ( ) | ^ < > nowa linia odstęp tabulator znaków

•

•

\c – znak c

$@ – wszystkie argumenty z wyjątkiem $0 jako osobne łańcuchy

• ’string’ – chroni wszystkie znaki specjalne znaków

•

• "string" – chroni wszystkie znaki specjalne z wyjątkiem $

$# – liczba argumentów

•

•

$? – status wyjścia ostatniej komendy

‘command‘ – podstawienie rezultatu komendy

• $$ – PID aktualnegj powłoki

• $! – PID ostatniej komendy wykonywanej w tle 5

7

&

19

padziernika

1998

roku

SHELL

ASU

%

&

19

padziernika

1998

roku

SHELL

ASU

%

'

Jerzy

Sobczyk

$

'

Jerzy

Sobczyk

$

Komendy wewnętrzne

Podstawienia

• break – wyjście z pętli

• ${name} – wartość parametru

• continue – skok na początek pętli

• ${name:-word} – jeśli parametr nie jest zdefiniowany podstaw

• cd – zmiana katalogu

słowo

•

• echo – wyświetlenie tekstu

${name:=word} – jeśli parametr nie jest zdefiniowany zdefiniuj go

•

• export – udostępnienie zmiennych innym programom ${name:?word} – jeśli parametr nie jest zdefiniowany wypisz słowo i zakończ działanie

• read – wczytanie jednej linii z wejścia

• ${name:+word} – jeśli parametr jest zdefiniowany podstaw słowo

• test – sprawdzenie warunku

• unset – skasowanie definicji zmiennej 6

8

&

19

padziernika

1998

roku

SHELL

ASU

%

&

19

padziernika

1998

roku

SHELL

ASU

%

'

Jerzy

Sobczyk

$

'

Jerzy

Sobczyk

$

Sterowanie

•

Porównania

for zmienna [ in słowo ... ] do lista done

– powtórzenie listy komend dla wszystkich wymienionych wartości zmiennej

-z łańcuch – Prawda jeśli długość łańcucha jest równa zero

• case słowo in [ wzorzec [ | wzorzec ] ... ) lista

-n łańcuch – Prawda jeśli długość łańcucha jest większa niż zero

;; ] ... esac

s1 = s2 – Prawda jeśli łańcuchy są identyczne

– wykonanie listy komend jeśli słowo pasuje do wzorca

•

s1 != s2 – Prawda jeśli łańcuchy nie są identyczne if wyrażenie then lista [ elif lista then lista ] ... [ else lista ] fi

n1 -eq n2 – Prawda jeśli liczby są równe

– wykonanie listy komend zależnie od wartości wyrażenia n1 -ne n2 – Prawda jeśli liczby są różne

• while wyrażenie do lista done – powtarzanie listy komend dopuki n1 -lt n2 – Prawda jeśli n1 jest mniejsze niż n2

wyrażenie jest prawdą

n1 -le n2 – Prawda jeśli n1 jest mniejsze lub równe n2

• (lista) – wykonanie listy komend w osobnej powłoce n1 -gt n2 – Prawda jeśli n1 jest większe niż n2

• { lista;} – wykonanie listy komend w tej samej powloce n1 -ge n2 – Prawda jeśli n1 jest większe lub równe n2

• nazwa(){ lista;} – zdefiniowanie procedury

• #komentarz – komentarz

9

11

&

19

padziernika

1998

roku

SHELL

ASU

%

&

19

padziernika

1998

roku

SHELL

ASU

%

'

Jerzy

Sobczyk

$

'

Jerzy

Sobczyk

$

# Czekanie na odpowiedz t lub n

getyn()

{

Sprawdzenie plików

while echo "\n$* (t/n)? \c">&2

do read yn rest

case $yn in

-r plik – Prawda jeśli plik istnieje i można go odczytać

-w plik – Prawda jeśli plik istnieje i można go zapisać

[tT]) return 0 ;;

-x plik – Prawda jeśli plik istnieje i można go wykonać

[nN]) return 1 ;;

-f plik – Prawda jeśli plik istnieje i jest zwykłym plikiem

*) echo "Odpowiedz t lub n" >&2 ;;

-d plik – Prawda jeśli plik istnieje i jest katalogiem esac

-h plik – Prawda jeśli plik istnieje i jest linkiem symbolicznym done

-s plik – Prawda jeśli plik istnieje i ma rozmiar większy niż zero

}

getyn "Czy chcesz zachować plik"

if [ $? -eq 0 ]; then

....

10

12

&

19

padziernika

1998

roku

SHELL

ASU

%

&

19

padziernika

1998

roku

SHELL

ASU

%