SOUP wykl3

Wykład 3

Programowanie w języku Shell

Język shell:

sh – interakcyjny interpreter komend, który wykonuje komendy przeczytane z terminala lub pliku

skrypt powłokowy – plik tekstowy, który zawiera sekwencję poleceń przeznaczony do interpretacji przez powłokę Shell

Metody uruchamiania skryptów:

- przez wskazanego shell’a (niezbędne prawa dostępu r):

$ sh skrypt1 [par] …

- przez wskazanego shell’a z ustawioną opcję śledzenia:

$ sh –x skrypt1 [par] …

- przez potomka bieżącego shell’a (niezbędne prawa dostępu rx):

$ sciezka_dostepu/skrypt1 [par] …

- z bieżącego katalogu:

$ ./skrypt1 [par] …

- gdy ustawiona zmienna środowiskowa PATH

$ skrypt1 [par] …

- interpretacja skryptu przez bieżący Shell:

$ . ./skrypt1 [par] …

Przerywanie działania skryptów:

- wysyłanie sygnału nr 2 (SIGINT) do procesu - <CTRL-C>

- wygenerowanie pliku core - <CTRL-\>

- wysyłanie sygnału nr 9 (KILL) do procesu – komenda kill z opcją -9

Zmienne specjalne shell’a:

$# - liczba argumentów pozycyjnych

$0 – nazwa skryptu shell’owego

$1-$9 – zmienne pozycyjne

$* - rozwijane do „$1 $2 …”

$@ - rozwijane do „$1” „$2” …”

$? – kod powrotu ostatniego polecenia

$$ - numer procesu bieżącego shell’a

$! – numer ostatniego procesu uruchomionego w tle

Wybrane zmienne środowiskowe:

HOME – domyślna wartość argumentu komendy cd ustawiana przez proces login na podstawie zapisu w pliku /etc/passwd

IFS – domyślne separatory pól (spacja, znak tabulacji i nowej linii)

LOGNAME – nazwa konta

PATH – lista ścieżek dostępu przeszukiwania dla komend

PS1 – pierwszy ciąg zaproszenia do pisania (domyślnie „$”)

PS2 – pierwszy ciąg zaproszenia do pisania (domyślnie „>”)

PWD – ścieżka dostępu do katalogu bieżącego

Zmienne programowe:

Zmienne programowe – tworzaeone przez użytkownika i wykorzystywane przez procedury shell’owe

Przykład:

$ nazwa_pliku=dane.txt

$ dzien_tyg=dzien.txt

Listowanie i odwoływanie zmiennych programowych oraz środowiskowych:

Listowanie zmiennych:

$ set

Odwoływanie zmiennych:

$ Undset dzien_tyg

Przykładowy skrypt:

$ cat > skrypt2

echo „Podaj imie: \c”

read A

echo „\nWprowadzono:\t$A”

<CTRL-D>

Wynik:

$ skrypt2

Podaj imie: Ewa

Wprawadzono: Ewa

$

Pojęcia podstawowe shell’a:

Znak biały – niezerowej długości ciąg znaków składający się ze znaków tabulacji i/lub znaków spacji

Nazwa – sekwencja znaków ASCII: małych liter, dużych liter, cyfr i znaków podkreślenia zaczynających   się od litery lub znaku podkreślenia

Parametr – nazwa, liczba lub znak ze zbioru {*, @, #, ?, -, $, !, \, ^}

Komenda prostanazwa_kom [-opcje] [parametry]

Wartość komendy prostej – dodatnia liczba zwracana po wykonaniu komendy; (0 – poprawnie)

Potok

- sekwencja kilku komend oddzielonych „|”

- standardowe wejście jednej komendy jest podłączone do standardowego wejścia kolejnej     komendy

- zwraca wartość potoku jest równa wartości ostatniej komendy potoku

Lista – sekwencja jednego lub kliku potoków oddzielonych przez znaki ‘;’ i ‘&’ (niski priorytet) i znaki   &&, || (wysoki priorytet)

; - sekwencyjne wykonywanie potoków

& - asynchroniczne wykonywanie potoków

&& - lista występująca za tymi znakami jest realizowana, jeżeli poprzedzający potok zwróci wartość równą 0

$ test –r /etc/hosts && cat /etc/hosts

|| - lista występująca za tymi znakami jest realizowana, jeżeli poprzedzający potok zwróci wartość różną od 0

$ test –e /etc/dzien||date > cat /etc/dzien

Komenda

złożone:

  1. podstawienie komend

komenda1 `komenda2`

Wynik działania komendy komenda2 jest traktowany jako parametry komendy komenda1

Podstawienie komend może być wykonywane rekurencyjnie

  1. warunkowa – if

if lista0 Jeżeli wartość zwracana przez

then listę lista0 jest równa 0

lista1 (sukces), to wykonywana jest

elif lista2 ; then lista lista1, a jeżeli jest różna

lista3 od 0, to sprawdzana jest

: wartość listy lista2 itd.

:

else Gdy wszystkie listy następujące po

listan if lub po elif zwrócą wartość różną

fi od 0 wykonywana jest lista listan

  1. wyboru – case

case word in

wz01 wz02 … )

lista0

;;

wz11 wz12 … )

lista1

;;

      :

      :

esac

  1. pętli – for, while, until

for name [ in word…] ; do

list

done

W każdym przebiegu pętli zmienna name przybiera kolejne wartości z wykazu słów po in. Jeżeli wykaz In jest pominięty, to pętla jest wykonywana jednorazowo dla każdej ustawionej wcześniej zmiennej pozycyjnej

while lista0 ; do

lista1

done

Jeżeli wartość zwracana przez listę lista0 jest równa 0 (sukces), to wykonywana jest lista lista1. W przeciwnym przypadku pętla jest przerywana. Jeżeli lista1 jest pusta komenda while zwraca 0.

  1. definicja funkcji

TEST

Test expr lub [ expr ]

Komenda test wyznacza wyrażenie expr jeżeli jego wartość logiczna jest prawdą zwraca 0; w przeciwnym przypadku zwraca wartość różną od 0.

Wartość niezerowa jest również zwracana w

Elementy do tworzenia wyrażeń Expo:

-r file – prawda, jeżeli plik file istnieje i jest odczytywalny

-w file – prawda, jeżeli plik file istnieje i jest zapisywalny (ustawione prawdo dostępu „w” dla pliku).

- x file – prawda, jeżeli plik file istnieje i ma atrybuty do wykonywania

- e file – prawda, jeżeli plik file istnieje

- f file – prawda, jeżeli plik file istnieje i jest plikiem regularnym

- d file – prawda, jeżeli plik file istnieje i jest katalogiem

- h file – prawda, jeżeli plik file istnieje i jest symbolicznym wiązaniem do pliku

- c file – prawda, jeżeli plik file istnieje i jest znakowym plikiem specjalnym

- b file – prawda, jeżeli plik file istnieje i jest blokowym plikiem specjalnym

- u file – prawda, jeżeli plik file istnieje i ma ustawiony bit SUID

- g file – prawda, jeżeli plik file istnieje i ma ustawiony bit GUID

- k file – prawda, jeżeli plik file istnieje i ma ustawiony sticky bit

- s file – prawda, jeżeli plik file istnieje i jego rozmiar jest większy od 0

- z s1 – prawda, jeżeli długość ciągu s1 jest równa 0

-n s1 – prawda, jeżeli długość ciągu s1 nie jest równa 0

s1 – prawda, jeżeli ciąg s1 nie jest ciągiem pustym

s1 = s2 – prawda, jeżeli ciągi s1 i s2 są identyczne

s1! = s2 – prawda, jeżeli ciągi s1 i s2 nie są identyczne

n1 –eq n2 – prawda, jeżeli liczby całkowite n1 i n2 są algebraicznie równe. Pozostałe operatory   algebraiczne: ne, gt, ge, lt, le

! – jednoargumentowy operator negacji logicznej

-a – operator iloczynu logicznego

-o – operator sumy logicznej (-a ma priorytet wyższy niż –o)

( expr ) – nawiasy do tworzenia wyrażeń złożonych

Sprawdzenie czy plik nie istnieje:

if [ ! –f $HOME/.profile ] ; then

Echo „Brak pliku .profile.

Kopiuje z /etc/skel/B”

Cp /etc/skel/B/.profile $HOME/.profile

fi

Sprawdzenie czy zmienna została zdefiniowana:

while [ -z „$VAL” ] ; do

echo –n „Wprowadź wartość zmiennej:”

read VAL

done

EXPR

expr argumetny

Wykaz operatorów (ułożone rosnąco według priorytetu):

expr1\| expr2 wypisuje expr1 jeżeli nie jest puste ani nie jest wyzerowane. W przeciwnym przypadku wypisuje expr2

expr1\&expr2 wypisuje expr1 jeżeli nie jest puste ani nie jest wyzerowane. W przeciwnym przypadku wypisuje 0.

expr1 {=, \>, \>=, \<, \<=, != } expr2 wypisuje logiczną wartość wyniku porównania

expr1 { +, -} expr2 – wypisuje wynik dodawania lub odejmowania wyrażeń całkowitych

expr1 {\*, /, % } expr2 – wypisuje wynik mnożenia, dzielenia lub resztę z dzielenia wyrażeń całkowitych

expr1 : expr2 – wpisuje liczbę identycznych znaków w obu wyrażeniach począwszy od lewej strony

\( expr \) - wyodrębnianie ciągu pasującego do wyrażenia w nawiasach

0 – jeżeli nie jest puste ani nie ma wartości 0

1 – jeżeli jest puste lub ma wartość zero

2 – błąd

FUNKCJE:

name(){

Lista0

}

Definicja funkcji o nazwie name, której ciałem jest lista lista0. Parametry wywoływania funkcji są przekazywane do funkcji przez parametry pozycyjne.


Wyszukiwarka

Podobne podstrony:
8838 Mima wykl3
ped.wykl3, PEDAGOGIKA
Polish Tomato Soup
SOUP wykl6
Neurologia wykl3
Podstawy metr wykł3 2008
119089120 Primordial Political Soup
islcollective veggie soup'4674c0d3fc60ec564)171866
pizza soup
Silniki spal.-wykł3, III rok, Samochodowe silniki spalinowe
inz wykl3
wykl3
Wykl3
wykł3
psych.wykl3, PSYCHOLOGIA
Polish Potato Soup

więcej podobnych podstron