unix polecenia, Elektrotechnika PW, Semestr 1, INFORMATYKA, Unix

Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.

 

LINUX - UNIX - język poleceń (Skrypty)

 

1.     Interpreter zleceń

Interpreter zleceń służy do komunikacji użytkownika z systemem. Interpreter taki najczęściej nazywany jest shell-em (pośrednictwem użytkownika). Większość systemów Unix oferuje kilka standardowych pośrednictw:

Bourne Shell

Bourne Shell (sh) został napisany przez Stephena Bourne w Bell Laboratories i jest najstarszym shell-em Unixa. Bourne Shell jest również domyślnym shell-em w większości systemów Unix. Cecha ta spowodowała, że sh stał się standardem de facto. Bourne shell nie zawiera jednak żadnych dodatkowych udogodnień, ani jeżeli chodzi o edycję linii zlecenia, ani dodatkowych konstrukcji języka skryptów.

C Shell

C Shell (csh) został stworzony przez Billa Joya w University of California w Berkeley. Nazwa shell-a wzięła się z podobieństwa składni do języka do języka C. Shell ten zawiera wiele udogodnień w stosunku do Bourne Shell-a takich jak rozbudowanie składni, historia zleceń itp.

Korn Shell

Korn Shell (ksh) został napisany przez Davida Korna w Bell Laboratories. Jest to rozszerzona wersja shell-a Bourne'a wyposażona dodatkowo o elementy edycji linii zleceń, historię zleceń itp.

BASH Shell

BASH Shell  (Bourne Again Shell)  został stworzony przez Briana Foxa i Cheta Rameya i udostępniony na zasadach licencji GNU. Jest on powłoką wykorzystywaną w wielu systemach linuxowych jako domyślna. Jest w pełni kompatybilny z powłoką sh oraz zawiera wiele ciekawych rozwiązań przejętych od powłok Korn i C (ksh i csh).

2.     Podstawowe zlecenia systemu UNIX:

cat              -              połączenie, skopiowanie i wydrukowanie zawartości zbioru

cd                            -              zmiana bieżącego katalogu

chgrp              -              zmiana grupy zbioru

chmod              -              zmiana praw dostępu do zbioru

chown              -              zmiana właściciela zbioru

chsh              -              zmiana standardowego shell-a użytkownika

cp                            -              kopiowanie zawartości zbioru

date              -              wydrukowanie lub ustawienie daty i czasu

echo              -              wydrukowanie tekstu na terminalu

head              -              drukuje początek zbioru

lnk              -              łączenie zbiorów

ls                            -              listowanie zawartości kartoteki

man              -              system pomocy systemu UNIX (man nazwa_polecenia)

mkdir              -              tworzenie nowego katalogu

more              -              “stronicowanie” wydruków

mv                            -              przeniesienie zawartości zbioru

pg                            -              “stronicowanie” wydruków

ps                            -              wydrukowanie informacji o procesach w systemie

pwd              -              wydrukowanie bieżącej kartoteki

rm                            -              usuwanie zbioru

rmdir              -              usuwanie katalogu

tail              -              drukuje końcówkę zbioru

wc                            -              zliczanie znaków, słów, linii

who              -              wypisanie listy użytkowników zalogowanych w systemie

sleep              -              "usypia" proces

3.     Elementy linii zlecenia shell-a

Najprostsza linia zlecenia ma postać:  zlecenie [opcje] [parametry]. Przykładem takiego zlecenia może być:

ls -l *.c.

Zlecenie ls wydrukuje zawartość kartoteki w "długim" formacie (opcja -l). Wydrukowane zostaną zbiory kończące się na .c (parametr *.c). Kilka zleceń może być łączone w jedną linię za pomocą znaku średnika ; np:

ls *.c ; who ; ps

W linii występują trzy zlecenia ls, who oraz ps oddzielone znakiem średnika. Tak połączone zlecenia będą wykonywane sekwencyjnie. Oznacza to, że najpierw wykona się zlecenia ls, po jego zakończeniu who, a na końcu ps. Programy mogą być też wykonywane niesekwencyjnie. W tym przypadku każdy program wykonuje się bez czekania na zakończenie procesu poprzedzającego. Aby wykonać zlecenia w tle należy oddzielać je znakiem & np:

ls *.c & who & ps

W tym przypadku zlecenie who rozpocznie się bez czekania na zakończenie procesu ls. Podobnie jest ze zleceniem ps.

4.     Strumienie danych

Każdy program ma skojarzone co najmniej trzy strumienie standardowe: strumień wejścia (stdin), strumień wyjścia (stdout) oraz strumień błędu (stderr). Predefiniowanym standardowym strumieniem wejściowym jest klawiatura terminala, zaś predefiniowanymi strumieniami wyjścia i błędu jest ekran. Shell-e umożliwiają przekierowania strumieni w linii zlecenia. Przekierowania wejścia dokonuje się podobnie jak w systemie DOS lub Windows przez znaki < lub << i np:

program < zbior                            - program czyta dane ze zbioru o nazwie zbior.

program << tekst                            - program czyta dane z następnych linii zlecenia aż do napotkania linii zawierającej tekst zapisany po znaku << (w tym przypadku słowa tekst).  Jeżeli po znaku << damy znak - to linie podawane na standardowe wejście będą pozbawiane wiodących znaków tabulacji.

Przekierowanie wyjścia ma postać:

program > zbior                            - wyniki są umieszczane w zbiorze. Jeżeli zbiór istniał, to jego poprzednia zawartość będzie zastąpiona.

program >> zbior              - wyniki są dopisywane na końcu zbioru. Jeżeli zbiór nie istniał, zostanie utworzony.

Czasami wykorzystwana jest także konstrukcja postaci:

program <&cyfra oraz program >&cyfra

W tym przypadku wejście lub wyjście jest skierowane do strumienia o podanym numerze. Standardowe wejście ma numer 0, standardowe wyjście 1, zaś strumień błędu 2 np:

ls >&2              - przekierowuje strumień wyjścia do strumienia błędu. Istotnym jest, że przy przekierunkowywaniu strumieni można wskazać, który strumień mamy na uwadze, np:

cat 2>err              - przekierunkowanie strumienia błędu do zbioru

Bardzo często wykorzystywanym mechanizmem jest przetwarzanie potokowe. Aby skierować strumień wyjściowy na wejście następnego procesu należy połączyć je znakiem | np:

who | wc               standardowe wyjście zlecenia who jest podawane na wejście zlecenia wc.

Bardzo istotnym elementem języka shell-a jest mechanizm wzorców służący do specyfikowania zbiorów, które mają być parametrami zlecenia. W skład wzorca mogą wchodzić następujące elementy:

*                            - zastępuje dowolny (w tym pusty) ciąg znaków

?                            - zastępuje dokładnie jeden znak

[ ... ]              - zastępuje określone znaki

Przykładem wyrażenia może być np: rm [a-s]i?abc*.[jm]

Powyższe zlecenia skasuje wszystkie zbiory, które rozpoczynają się małą literą z zakresu od „a” do „s”, następnie występuje litera „i” następnie dowolna jedna litera, następnie człon trójliterowy „abc”, następnie dowolny łańcuch znaków, następnie kropka „.” i na końcu jedna z liter „j” lub „m”.

5.     Środowisko

Podobnie jak w systemie DOS czy Windows, shell w systemie UNIX posiada swoje własne środowisko. Składa się ono ze zmiennych środowiska lub zmiennych shell-a. Zmienne środowiska są dostępne z poziomu shell-a oraz są eksportowane do środowisk procesów potomnych. Zmienne shell-a są dostępne tylko z poziomu samego interpretera i nie są dziedziczone przez procesy potomne. Przypisanie wartości zmiennej shell-a uzyskuje się przez wykonanie zlecenia:

ZMIENNA=wartość

Aby zmienna shell-a stała się zmienną środowiska musi zostać wyeksportowana. Uzyskuje się to przez zlecenie:

export ZMIENNA               - wyeksportowanie zmiennej o nazwie ZMIENNA

Nazwy zmiennych środowiska/shell-a nie muszą składać się wyłącznie z dużych liter. Podczas logowania do systemu są ustawiane następujące zmienne środowiska:

HOME                            -              nazwa kartoteki bazowej użytkownika

LOGNAME                            -              nazwa użytkownika

PATH                            -              ścieżki poszukiwań programów

SHELL                            -              ścieżka do shella

TERM                            -              rodzaj terminala, i inne

Wartości zmiennych środowiska/shell-a są dostępne przez konstrukcję: $ZMIENNA. Aby przykładowo wyświetlić wartość zmiennej o nazwie ZMIENNA należy wykonać zlecenie:

echo $ZMIENNA

Jeżeli zmienna nie występuje to pojawi się błąd! Zmienna może być usunięta ze środowiska za pomocą zlecenia unset np:

unset ZMIENNA

Jeżeli zmienna istnieje można wykorzystywać ją do zmiany wartości np:

PATH=$HOME/bin:$PATH:.

W tym przypadku do wartości zmiennej środowiskowej PATH dołożono „z przodu” wartość $HOME/bin, a na końcu dołączono katalog bieżący. Jeżeli nazwa zmiennej mogłaby połączyć się z resztą tekstu można użyć znaków {} np:

echo poczatek${ZMIENNA}koniec.

Do pracy ze zmiennymi można wykorzystać także inne konstrukcje podstawienia:

${zmienna:-wartość}              -  jeżeli zmienna istnieje i ma przypisaną niepustą wartość wynikiem konstrukcji jest ta wartość. W przeciwnym razie jest podstawiana „wartość”.

${zmienna:=wartość}              - jeżeli zmienna nie istnieje lub jest pusta przypisuje się jej „wartość”, która jest także wynikiem podstawienia. Jeżeli zmienna ma przypisaną wartość wynikiem jest ta wartość a przypisanie nie następuje.

${zmienna:?wartość}              - podobnie jak :-, lecz jeżeli zmienna nie występuje lub jej wartość jest pusta, to występuje błąd.

${zmienna:+wartość}              - jeżeli zmienna występuje i ma przypisaną niepustą wartość to wynikiem jest „wartość”. W przeciwnym wypadku podstawienie nie występuje

Poza zmiennymi środowiska/shell-a występują także zmienne parametryczne. Wartości parametrów wywołania skryptu podstawiane są pod kolejne parametry $1, $2, $3, ... ...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • alter.htw.pl
  • Powered by WordPress, © Nie obrażaj więc mojej inteligencji poprzez czynione na pokaz zaniżanie własnej.