Powłoka (shell) Powłoka ksh
Transkrypt
Powłoka (shell) Powłoka ksh
Powłoka (shell) Powłoka - interface mie˛dzy użytkownikiem a systemem operacyjnym. Funkcje: • interpreter poleceń użytkownika • je˛zyk programowania poleceń Najcze˛ściej stosowane powłoki: Bourne’a sh Korna ksh C csh Powłoki public domain: bash, zsh, tcsh Powłoka ksh Linia komentarza: # komentarz Słowo: cia˛g znaków mie˛dzy spacjami Komenda: cia˛g słów postaci: nazwa_komendy parametry Komenda zwraca status wyjścia Potok: cia˛g jednej lub wielu komend oddzielonych znakiem |, np. ls | sort | more Lista: cia˛g potoków/komend oddzielonych (i ew. zakończonych) znakami nowej linii lub znakami: ; - wykonanie sekwencyjne & - wykonanie asynchroniczne Wartościa˛ zwracana˛ przez potok/liste˛ jest wartość zwracana przez ostatnia˛ komende˛ potoku/listy Zmienne powłoki Zmienne powłoki definiujemy instrukcja˛ przypisania zmienna=wartosc Doste˛ p do 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 predefiniowanych: # liczba parametrów pozycyjnych $1, $2, ... kolejne parametry pozycyjne ? status zwrócony przez ostatnia˛ komende˛ ! 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 doste˛ pu PS1, PS2, prompt EDITOR używany edytor ASCII (vi lub emacs) MAIL plik zawieraja˛ cy poczte˛ 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 moga˛ być • lokalne - obowia˛ zuja˛ tylko w danej powłoce • środowiskowe (eksportowane) - obowia˛ zuja˛ powłokach potomnych Przykłady: $ xx=YYY $ zsh $ echo $xx $ $ $ $ również w xx=YYY export xx zsh echo $xx YYY Substytucje wykonywane przez powłoke˛ • aliasy alias lll=’ls -l -a -F | more’ lll • ścieżka doste˛ pu do pliku more ~janek/doc/raport ≡ more /users/students/janek/doc/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] • zmienne powłoki more $HOME/doc/raport (powłoka zsh) • generacja nazw plików ls [ao]la b*d * ? [ABCa-c] [^A-Z] (x|y) x# ... dowolny cia˛ g znaków (także pusty) dowolny znak jeden ze znaków: A, B, C, a, b, c dowolny znak nie be˛ da˛ cy duża˛ litera˛ x lub y powtórzenie wzorca x Cytowanie (quoting) \x ’...’ "..." znak x cia˛ g znaków cia˛ g znaków (za wyja˛ tkiem zmiennych powłoki i znaku \ ’) Przykłady: echo \$HOME = $HOME echo ’X > Y’ echo "$HOME ----- > YY" Konstrukcje steruja˛ ce je˛ zyka powłoki Instrukcja warunkowa: if warunek then lista fi if warunek then lista else lista fi if warunek then lista elif warunek then lista ... else lista fi Wyrażenia określaja˛ 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 sa˛ zgodne wyr1 -eq wyr2 wartości wyrażeń wyr1 i wyr2 sa˛ równe (także: -ne -lt -gt -le -ge || && !) Przykład: if [[ -d $nn ]] then rm $nn/* elif [[ -f $nn ]] rm $nn else echo Nie znaleziono pliku $nn fi Instrukcja wyboru: case slowo in wzorzec1 ) lista ;; wzorzec2 ) lista ;; ... esac Przykład case $ans y* ) n* ) * ) esac in echo Yes ;; echo No ;; echo Maybe ;; Pe˛ tle: for zmienna [ in słowo ... ] do lista done Przykłady for plik in *.txt do head -1 $plik >> naglowki done ol=""; for i in 0 1 2 3 4 5; do ol=${i}${ol}; done; echo $ol while warunek do lista done until warunek do lista done Przykłady let x=0 while [[ $x -lt 10 ]] do echo x = $x (( x=x+1 )) done while who | grep szef do sleep 60 done echo Szef sie wylogowal, koniec pracy! W liście po do można użyć komend break przerwanie pe˛ tli continue powrót do pocza˛ tku pe˛ tli Specjalne instrukcje powłoki ( lista ) lista jest wykonywana w osobnym środowisku { lista; } lista jest wykonywana w tym samym środowisku time potok function fname { lista; } fname () { lista; } Skrypty • • • • • Sa˛ wykonywane w osobnej powłoce Moga˛ być wykonane w aktualnej powłoce za pomoca˛ komendy . skrypt [par1 par2 ...] Winny mieć ustawiony atrybut x Parametry przekazywane w linii komendy sa˛ doste˛ pne jako zmienne powłoki $1, $2, ... . Komenda shift powoduje przesunie˛ cie zmiennych pozycyjnych o jedna˛ pozycje˛ Użytkownik może narzucić powłoke˛ /interpreter: #!/bin/ksh lub ksh <skrypt Plik .profile Użytkownik może umieścić zestaw komend, które maja˛ sie˛ wykonać po zalogowaniu do systemu w pliku .profile .zprofile (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 do katalogu # podanego jako argument. # 2. Zmieniane sa nazwy plikow przez dodanie # przyrostka .old # 3. Jesli katalog docelowy nie istnieje, to # jest tworzony if [[ $# = 0 ]] then echo Blad - brak agumentu! echo echo Sposob uzycia skryptu: echo cpold katalog else if [[ ! -d $1 ]] then mkdir $1 fi for plik in * do if [[ -f $plik ]] then cp $plik $1/${plik}.old fi done fi