Powłoka (shell) Powłoka - interface między użytkownikiem a systemem operacyjnym. Funkcje: interpreter poleceń użytkownika język programowania poleceń Najczęściej stosowane powłoki: Bourne a sh Korna ksh C csh Powłoki public main: bash, zsh, tcsh Linia komentarza: # komentarz Powłoka ksh Słowo: ciąg znaków między spacjami Komenda: ciąg słów postaci: nazwa_komendy parametry Komenda zwraca status wyjścia Potok: ciąg jednej lub wielu komend oddzielonych znakiem, np. ls sort more Lista: ciąg potoków/komend oddzielonych (i ew. zakończonych) znakami nowej linii lub znakami: ; - wykonanie sekwencyjne & - wykonanie asynchroniczne Wartością zwracaną przez potok/listę jest wartość zwracana przez ostatnią komendę potoku/listy
Zmienne powłoki Zmienne powłoki deniujemy instrukcją przypisania zmienna=wartosc Dostęp wartości zmiennych powłoki $zmienna lub ${zmienna} Przykłady: system=unix echo To jest system $system N=2 nazwa=dane cp ${nazwa}$n kopie\ Przykłady zmiennych predeniowanych: # liczba parametrów pozycyjnych $1, $2,... kolejne parametry pozycyjne? status zwrócony przez ostatnią komendę! numer ostatnio uruchomionego procesu w tle $ nr procesu powłoki PPID nr procesu rodzicielskiego powłoki HOME prywatny katalog użytkownika PWD aktualny katalog OLDPWD poprzedni katalog PATH ścieżka stępu PS1, PS2, prompt EDITOR używany edytor ASCII (vi lub emacs) MAIL plik zawierający pocztę TERM nazwa używanego terminala SHELL używana powłoka RANDOM liczba losowa SECONDS liczba sekund od uruchomienia powłoki LOGNAME nazwa użytkownika...
Zmienne powłoki mogą być lokalne - obowiązują tylko w danej powłoce śrowiskowe (eksportowane) - obowiązują również w powłokach potomnych Przykłady: $ xx=yyy $ xx=yyy $ export xx $ zsh $ zsh $ echo $xx $ echo $xx YYY Substytucje wykonywane przez powłokę aliasy alias lll= ls -l -a -F more lll ścieżka stępu pliku more ~janek/c/raport more /users/students/janek/c/raport ~ wartość zmiennej HOME ~+ " " PWD ~- " " OLDPWD wynik działania komendy ls -l grep $(who am i) cat ls tail -2 > last2 wyrażenia arytmetyczne let k=2 (( m=k+3 )) echo Wynik= $[m*k/2] (powłoka zsh) zmienne powłoki more $HOME/c/raport
generacja nazw plików ls [ao]la b*d * wolny ciąg znaków (także pusty)? wolny znak [ABCa-c] jeden ze znaków: A, B, C, a, b, c [^A-Z] wolny znak nie będący dużą literą (x y) x lub y x# powtórzenie wzorca x... Cytowanie (quoting) \x znak x... ciąg znaków "..." ciąg znaków (za wyjątkiem zmiennych powłoki i znaku \ ) Przykłady: echo \$HOME = $HOME echo X > Y echo "$HOME ----- > YY"
Konstrukcje sterujące języka powłoki Instrukcja warunkowa: if warunek if warunek elif warunek if warunek... else else Wyrażenia określające warunek Składnia: [[ wyrażenie_warunkowe ]] -a fname plik fname istnieje -d fname fname jest katalogiem -f fname fname jest zwykłym plikiem -w fname plik fname może byćzapisany -x fname plik fname można wykonać napis = wzorzec napis i wzorzec są zgodne wyr1 -eq wyr2 wartości wyrażeń wyr1 i wyr2 są równe (także: -ne -lt -gt -le -ge &&!) Przykład: if [[ -d $nn ]] rm $nn/* elif [[ -f $nn ]] rm $nn else echo Nie znaleziono pliku $nn
Instrukcja wyboru: case slowo in wzorzec1 ) ;; wzorzec2 ) ;;... esac Przykład case $ans in y* ) echo Yes ;; n* ) echo No ;; * ) echo Maybe ;; esac
Pętle: for zmienna [ in słowo... ] Przykłady for plik in *.txt head -1 $plik >> naglowki ol=""; for i in 0 1 2 3 4 5; ol=${i}${ol}; ; echo $ol while warunek until warunek Przykłady let x=0 while [[ $x -lt 10 ]] echo x = $x (( x=x+1 )) while who grep szef sleep 60 echo Szef sie wylogowal, koniec pracy! W liście po można użyć komend break przerwanie pętli continue powrót początku pętli
Specjalne instrukcje powłoki ( ) jest wykonywana w osobnym śrowisku { ; } jest wykonywana w tym samym śrowisku time potok function fname { ; } fname () { ; }
Skrypty Są wykonywane w osobnej powłoce Mogą być wykonane w aktualnej powłoce za pomocą komendy. skrypt [par1 par2...] Winny mieć ustawiony atrybut x Parametry przekazywane w linii komendy są stępne jako zmienne powłoki $1, $2,.... Komenda shift powoduje przesunięcie zmiennych pozycyjnych o jedną pozycję Użytkownik może narzucić powłokę/interpreter: #!/bin/ksh lub ksh <skrypt Plik.prole Użytkownik może umieścić zestaw komend, które mają się wykonać po zalogowaniu systemu w pliku.prole.zprole (powłoki sh, ksh) (powłoka zsh) np.: TERM=vt100 PATH=$PATH:$HOME/bin:. EDITOR=vi export TERM EDITOR alias ll= ls -l
Przykład #!/bin/zsh # 1. Skrypt kopiuje wszystkie pliki z # aktualnego katalogu katalogu # podanego jako argument. # 2. Zmieniane sa nazwy plikow przez danie # przyrostka.old # 3. Jesli katalog celowy nie istnieje, to # jest tworzony if [[ $# = 0 ]] echo Blad - brak agumentu! echo echo Sposob uzycia skryptu: echo cpold katalog else if [[! -d $1 ]] mkdir $1 for plik in * if [[ -f $plik ]] cp $plik $1/${plik}.old