background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

   

P

P

O

O

W

W

Ł

Ł

O

O

K

K

A

A

 

 

S

S

Y

Y

S

S

T

T

E

E

M

M

U

U

 

 

U

U

N

N

I

I

X

X

 

 

P

P

R

R

O

O

G

G

R

R

A

A

M

M

O

O

W

W

A

A

N

N

I

I

E

E

 

 

P

P

O

O

W

W

Ł

Ł

O

O

K

K

 

 

P

P

O

O

D

D

R

R

C

C

Z

Z

N

N

I

I

K

K

 

 

 

 

Powłoka  (ang.  shell)  jest  interfejsem  mi dzy  u ytkownikiem  a  systemem  operacyjnym.  Jej 

podstawow   funkcj   jest  interpretacja  i  wykonanie  polece   u ytkownika.  W  celu  ułatwienia 

wprowadzania  cz sto  powtarzaj cych  si   ci gów  polece   dla  systemu  operacyjnego  powłoka 

udost pnia  j zyk  programowania  polece   u ytkownika  (b dzie  on  dalej  nazywany  j zykiem 

powłoki).  

Najcz ciej stosowanymi powłokami w ró nych implementacjach systemu UNIX s :  

• 

powłoka Bourne'a (

sh

)  

• 

powłoka Korna (

ksh

)  

• 

powłoka C (

csh

)  

lub  ich  modyfikacje,  b d ce  dziełem  ró nych  programistów  i  udost pnione  przez  nich  do 

swobodnego wykorzystania (np. powłoki: 

bash

zsh

tcsh

).  

Niniejsze opracowanie zawiera opis podstawowych własno ci powłoki 

ksh

. Praktycznie wszystkie 

podane tu informacje odnosz  si  równie  do powłok 

zsh

 i 

POSIX-sh

, wi kszo  tak e do powłoki 

sh

.  

1. Podstawowe poj cia 

U ytkownik mo e wprowadza  polecenia dla systemu operacyjnego na dwa sposoby:  

• 

wypisuj c je z klawiatury, lub  

• 

umieszczaj c ci g polece  w pliku tekstowym, a nast pnie u ywaj c nazwy tego pliku jako 

komendy. Plik taki b dziemy dalej nazywa  skryptem.  

Ci g znaków wprowadzany przez u ytkownika z klawiatury (lub linie skryptu) jest przez powłok  

dzielony na słowa, tj. ci gi znaków rozdzielone którym  z nast puj cych symboli:  

 

; & ( ) | < >

 

nl (nowa linia)

 

spacja (odst p)

 

TAB

 

 (powy sze symbole nazywa si  metaznakami).  

Pierwsze  słowo  w  linii  jest  nazw   komendy,  pozostałe  słowa  to  parametry  przekazywane 

komendzie,  w ród  których  mo emy  wyró ni   opcje,  zazwyczaj  poprzedzane  znakiem 

-

  (minus) 

oraz argumenty. Niektóre komendy s  wbudowane w powłok  (np. komenda 

cd

), zazwyczaj jednak 

s  to nazwy plików binarnych lub skryptów.  

P

RZYKŁAD 

1.1 

ls  -a -l  *.c  *.h 

 

nazwa opcje argumenty 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

 

Linie rozpoczynaj ce si  znakiem 

#

 s  liniami komentarza i s  ignorowane przez powłok .  

Komenda  pobiera  dane ze  standardowego  wej cia (ang.  standard input, w  skrócie stdin),  którym 

zazwyczaj jest klawiatura terminala. Wyniki działania komendy s  wyprowadzane na standardowe 

wyj cie (standard outputstdout), którym normalnie jest monitor terminala. Informacje o bł dach s  

kierowane  na  standardowe  wyj cie  diagnostyczne  (standard  error,  stderr).  W  dalszej  cz ci 

niniejszych  materiałów  zostan   opisane  sposoby  zmiany  przywi zania  standardowego  wej cia  i 

wyj cia.  

Kilka komend mo na poł czy  w potok, rozdzielaj c je metaznakiem 

|

, np.:  

P

RZYKŁAD 

1.2 

ls -l  |  grep kowalski  |  more 

 

Konstrukcja  taka  oznacza,  e  standardowe  wyj cie  pierwszej  komendy  b dzie  standardowym 

wej ciem  drugiej  komendy  potoku,  z  kolei  standardowe  wyj cie  drugiej  komendy  b dzie 

standardowym  wej ciem  trzeciej  komendy  itd.  W  powy szym  przykładzie  wynik  działania 

komendy 

ls

 b dzie wej ciem dla komendy 

grep

 która wybierze linie zawieraj ce słowo 

kowalski,

 

a  zatem  pliki,  których  wła cicielem  jest  u ytkownik  kowalski  (chyba,  e  w  nazwie  pliku  tak e 

pojawi si  ci g znaków 

kowalski

). Z kolei informacja b d ca wynikiem działania komendy 

grep

 

zostanie wy wietlona na ekranie monitora za pomoc  programu 

more

.  

Ci g potoków lub komend oddzielonych znakami 

;

 ( rednik) lub 

&

 (ampersand) b dziemy nazywa  

list   komend  (lub  po  prostu  list ).  U ycie  jako  separatora  znaku  rednika  oznacza,  e  komenda 

wyst puj ca  przed  rednikiem  musi  si   zako czy   zanim  powłoka  rozpocznie  wykonywanie 

komendy  po  redniku.  U ycie  jako  separatora  znaku 

&

  spowoduje,  e  komendy  rozdzielone  tym 

znakiem b d  si  wykonywały równolegle (asynchronicznie).  

P

RZYKŁAD 

1.3 

# Zamiana nazw plików a i b: 
 

    cp a tmp ;  mv b a ;  mv tmp 

 

Ka da  komenda  zwraca  pewna  warto   całkowitoliczbow ,  któr   nazywamy  statusem  wyj cia 

komendy. Warto  zero oznacza,  e komenda zako czyła si  sukcesem. Warto  ro na od zera jest 

zwracana w przypadku bł dów i sytuacji nietypowych.  

2. Zmienne powłoki 

Zmienne  powłoki  pozwalaj   przypisa   nazwie  symbolicznej  pewien  ci g  znaków  lub  liczb  

całkowit . Zmienn  tak  definiujemy przez instrukcje przypisania o postaci  

 

zmienna=warto  

 

gdzie:  

zmienna jest nazwa zmiennej, warto  jest ci giem znaków, który przypisujemy danej zmiennej. 

Od  chwili  zdefiniowania  zmiennej mo emy  u ywa  jej  nazwy  wsz dzie  tam,  gdzie  chcieliby my 

napisa  ci g znaków warto . Nazw  zmiennej musimy poprzedzi  znakiem 

$

, tj. musimy napisa   

 

$

zmienna lub 

${

zmienna

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

Tej drugiej postaci u ywamy zazwyczaj wtedy, gdy powłoka mo e mie  problem z jednoznacznym 

okre leniem nazwy zmiennej.  

P

RZYKŁAD 

2.1 

   system=UNIX 
   echo To jest system $system   #  Zostanie wypisany tekst: 
                                    To jest system UNIX 
   txt=abc 
   echo ${txt}def #  Zostanie wypisany tekst abcdef. Je li 
                     nazwa zmiennej txt nie byłaby zamkni ta w 
                     nawiasy, to powłoka szukałaby zmiennej 
                     txtdef 
   x=5 prog # Definicja zmiennej u yta przed nazwa komendy oznacza, 
               e zmienna jest znana tylko podczas wykonywania tej komendy. 
 

W powłoce, uruchamianej po zalogowaniu si  u ytkownika, jest zdefiniowanych wiele zmiennych 

(ich  liczba  i  nazwy  zale   od  rodzaju  powłoki).  Poni ej  zamieszczono  przykłady  wa niejszych 

zmiennych predefiniowanych przez system operacyjny lub powłok : 

 

#

  : Liczba parametrów pozycyjnych (patrz ni ej)  

$

 : Numer procesu powłoki  

PPID

 : Numer procesu rodzicielskiego  

HOME

 : Prywatny katalog u ytkownika  

MAIL

 : Skrzynka pocztowa u ytkownika  

PWD

 : Katalog aktualny  

OLDPWD

 : Katalog sprzed ostatniej komendy 

cd

  

SHELL

 : Nazwa powłoki  

RANDOM

 : Liczba losowa  

PATH

 : Scie ka przeszukiwa   

SECONDS

  : Liczba sekund od rozpocz cia pracy  

PS1

 : Tekst wy wietlany jako znaki gotowo ci do pracy systemu  

PS2

 : Jak wy ej, w przypadku kontynuacji komendy  

EDITOR

  : Edytor u ytkownika  

TERM

 : Nazwa terminala, z którego pracuje u ytkownik  

Niektóre z powy szych zmiennych (np. 

PWD

RANDOM

) nie wyst puj  w powłoce Bourne'a (sh).  

Jak  ju   wspomniano,  zestaw  komend  mo na  zapisa   na  dysku  w  postaci  skryptu  i  wykona   go 

wypisuj c jego nazw . Skrypt taki wykonuje si  w osobnej kopii powłoki. Je li wywołamy skrypt 

podaj c  w  oprócz  nazwy  równie   parametry,  to  parametry  te  s   dost pne  wewn trz  skryptu  jako 

zmienne  o  nazwach 

$1

$2

$3

,  ...

$

n.  Zmienne  te  nosz   nazw   zmiennych  pozycyjnych.  Liczba  n 

zmiennych pozycyjnych jest dost pna jako zmienna 

$#

.  

Zmienne powłoki mog  by  lokalne, czyli obowi zuj ce tylko w danej powłoce, lub  rodowiskowe 

(eksportowane).  W  tym  drugim  przypadku  obowi zuj   równie   w  powłokach  potomnych,  tj. 

uruchomionych  z  danej  powłoki  (np.  przez  wykonanie  skryptu  lub  jawne  wywołanie  programu 

powłoki).  Zmienna  zdefiniowana  instrukcj   przypisania  jest  zmienn   lokaln .  Zmienna  staje  si  

globalna po u yciu nazwy zmiennej jako argumentu komendy  

export

 zmienna ... 

 

 

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

P

RZYKŁAD 

2.2 

   aa=XXX 
   bb=YYY 
   export aa 
   ksh 
   echo $aa $bb   #  Zostanie wypisany tekst:  XXX (zmienna bb 
                     nie zostala wyeksportowana i nie jest 
                     dost pna w powłoce potomnej) 
 

List   zdefiniowanych  zmiennych  powłoki  (i  przypisane  im  warto ci)  mo na  uzyska   za  pomoc  

komendy 

set

. List  zmiennych  rodowiskowych otrzymamy po u yciu komendy 

env

.  

3. Substytucje wykonywane przez powłok  

Polecenia wypisywane przez u ytkownika z klawiatury lub programy (skrypty) w j zyku powłoki 

przed  prób   wykonania  mog   by   przez  powłok   modyfikowane.  Jedna  z  takich  modyfikacji 

została ju  opisana powy ej: ci gi znaków poprzedzone znakiem 

$

 s  interpretowane jako zmienne 

powłoki  i  zast powane  warto ciami  odpowiednich  zmiennych.  Modyfikacje  wykonywane  przez 

powłok  b dziemy nazywa  substytucjami. U ytkownik wykonywanie niektórych substytucji mo e 

zablokowa  (np. stosuj c przeł czniki powłoki).  

3.1. Aliasy 

Powłoka  sprawdza,  czy  pierwsze  słowo  komendy  ma  zdefiniowany  alias  (synonim).  Alias, 

podobnie jak zmienna powłoki, to pewna nazwa, której przypisano ci g znaków. U ytkownik mo e 

zdefiniowa  synonimy wybranych komend za pomoc  komendy o postaci  

alias

 synonim

=

ci g_znaków 

Oczywi cie,  ci g_znaków  musi  by   mo liwy  do  zinterpretowania  jako  nazwa  komendy  lub  listy 

komend.  Mechanizm  aliasów  wyst puje  w  powłokach  Korna  i 

zsh

,  nie  wyst puje  w  powłoce 

Bourne'a.  

P

RZYKŁAD 

3.1.1 

   alias  dir=ls        # Dwa ulubione aliasy u ytkowników 
   alias  md=mkdir      # systemu MS DOS 
   alias  ll='ls -al' 
   alias  llm='ll | more' 
 

W  dwóch  ostatnich  przykładach  znaki  cudzysłowu  pozwalaj   przypisa   nazwom 

ll

  i 

llm

  ci gi 

znaków  zawieraj ce  spacje.  Z  ostatniego  przykładu  wida ,  e  przy  definicji  aliasu  mo na  u y  

innego aliasu.    

3.2. Substytucja  cie ki 

Je eli pierwszym znakiem słowa jest znak 

~

 (tylda), to powłoka zast pi ten znak nazw  prywatnego 

katalogu  u ytkownika.  Substytucja  taka  b dzie  wykonana  tylko  wtedy,  je eli  tylda  jest  jedynym 

znakiem  w  słowie  lub  pozostała  cz

  słowa  rozpoczyna  si   uko nikiem.  Powłoka  interpretuje 

równie  nast puj ce konstrukcje rozpoczynaj ce si  od tyldy:  

 

 

~user  : nazwa prywatnego katalogu u ytkownika user  

~+

  : nazwa aktualnego katalogu  

~-

 : nazwa katalogu aktualnego przed ostatni  komend  

cd

  

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

P

RZYKŁADY 

3.2.1 

Je eli prywatnym katalogiem u ytkownika jest 

/home/janek

, to:  

   ~           =  /home/janek 
   ~/doc       =  /home/janek/doc 
   ~marek/bin  =  /home/marek/bin 
   ~+/doc      =  $PWD/doc 

3.3. Substytucja wyniku komendy 

U ycie konstrukcji o postaci  

 

$(

 lista 

 

(gdzie lista oznacza komend  lub ci g komend/potoków) spowoduje,  e powłoka wykona komendy 

składaj ce si  na list , i tekst stanowi cy wynik działania ostatniej komendy (tj. wysyłany przez t  

komend   na  standardowe  wyj cie)  zast pi  pokazan   wy ej  konstrukcj   (od  znaku 

$

  do  nawiasu 

zamykaj cego wł cznie). Równowa n  konstrukcj  do omawianej jest:  

 

`

 lista 

 

(nale y zwróci  uwag ,  e wyst puj ce w tej konstrukcji znaki to "odwrócone" znaki cudzysłowu).  

P

RZYKŁAD 

3.3.1 

Wy wietlenie listy plików, których wła cicielem jest u ytkownik:  

ls -l | grep `who am i` 

 

Przeniesienie plików, których nazwy s  wymienione w pliku 

filelist

 do katalogu 

dane

:  

 

mv $(cat filelist) dane/ 

3.4. Generacja nazw plików 

Je eli słowo stanowi ce cz

 komendy interpretowanej przez powłok  zawiera znaki  

 

* ? [ ]

 

to  słowo  to  zostanie  potraktowane  jako  wzorzec  i  zast pione  przez  powłok   list   słów  -  nazw 

plików  lub  katalogów  pasuj cych  do  tego  wzorca.  Przy  generacji  nazw  plików  obowi zuj  

nast puj ce reguły:  

• 

znak 

*

 oznacza dowolny ci g znaków (równie  ci g pusty),  

• 

znak 

?

 oznacza jeden dowolny znak,  

• 

konstrukcja 

[abc]

  oznacza  dokładnie  jeden  znak  spo ród  umieszczonych  w  nawiasach; 

u ycie  znaku 

^

  jako  pierwszego  zmienia  znaczenie  konstrukcji  na:  znak  inny  ni  

wymienione w nawiasach. Mo na tak e w nawiasach poda  zakres znaków przez podanie 

pierwszego i ostatniego znaku zakresu rozdzielonych znakiem 

-

.  

 

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

a*z

  

pasuje do nazw plików zaczynaj cych si  na liter  

a

 i ko cz cych na liter  

z

, np. 

az

aaz

axyz

.  

 

*.c

  

pasuje do nazw plików maj cych ko cówk  

.c

, np. 

prog.c

func.c

.  

 

[aeou]la

  

pasuje do nazw: 

ala

ela

ola

ula

.  

 

[A-Za-z]*

  

pasuje do nazw plików zaczynaj cych si  od litery. 

4. Cytowanie (quoting) 

Mo e  si   zdarzy ,  e  w  pewnych  sytuacjach  powłoka  zinterpretuje  wprowadzane  komendy 

niezgodnie  z  intencj   u ytkownika.  Mo na  si   przed  tym  zabezpieczy   odbieraj c  niektórym 

znakom (traktowanym przez powłok  w sposób szczególny) ich specjalne znaczenie. Słu y do tego 

mechanizm  cytowania  znaków.  W  omawianych  w  niniejszym  opracowaniu  powłokach  mo na 

stosowa  trzy sposoby cytowania:  

   

\x

  

odwrócony  uko nik  kasuje  specjalne  znaczenie  znaku  stoj cego  bezpo rednio  za  nim,  

   

'...'

  

pojedyncze  znaki  cudzysłowu  kasuj   specjalne  znaczenie  wszystkich  znaków  pomi dzy  nimi,  

   

"..."

  

podwójne  znaki  cudzysłowu  kasuj   specjalne  znaczenie  wszystkich  znaków  pomi dzy  nimi,  za 

wyj tkiem znaku $ (substytucja zmiennych powłoki) i znaku 

\

.  

P

RZYKŁADY 

4.1 

echo \$HOME = $HOME 

$HOME = /users/imie 

X=2 ; echo '$X > 1' 

$X > 1 

echo "$X > 1\n -------"

  

2 > 1

  

-------

  

5. Wyra enia arytmetyczne 

Zmienne  powłoki  mog   przyjmowa   warto ci  całkowitoliczbowe,  i  na  zmiennych  o  takich 

warto ciach  mo na  wykonywa   operacje  arytmetyczne.  Składnia  wyra e   arytmetycznych 

przypomina  składni   j zyka  C.  Mo na  stosowa   dwie  równowa ne  postacie  zapisu  wyra e  

arytmetycznych:  

let

 wyra enie 

lub 

(( 

wyra enie

 

)) 

 

(w przypadku stosowania drugiej podanej postaci nale y pami ta  o odst pach wokół podwójnych 

nawiasów).  

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

P

RZYKŁADY 

5.1 

   x=1; y=2  

 

# przypisanie warto ci liczbowych zmiennym x i y 

   let "x=x+1"   

# zwi kszane warto ci x o 1 

   echo  x = $x        # zostanie wypisane:  x = 2 
   (( x = x+y ))       # tutaj nie jest potrzebne cytowanie 
   echo  x = $x        # zostanie wypisane:  x = 4 

6. Konstrukcje steruj ce j zyka powłoki 

Powłoki  omawiane  w  niniejszym  opracowaniu  udost pniaj   u ytkownikowi  wiele  konstrukcji 

steruj cych,  pozwalaj cych  na  warunkowe  wykonywanie  polece ,  zautomatyzowanie  wykonanie 

powtarzaj cych  si   komend  itp.  Konstrukcje  steruj ce  powoduj ,  e  j zyk  powłoki  jest  w  pełni 

funkcjonalnym j zykiem programowania.  

6.1. Instrukcja warunkowa 

Instrukcja  warunkowa  pozwala  wykona   zestaw  (list )  komend,  je li  spełniony  jest  warunek 

okre lony przez u ytkownika. Najprostsz  postaci  instrukcji warunkowej jest:  

 

if

  warunek  

then

  lista  

fi 

 

Wyst puj cy w instrukcji warunek, od którego uzale nione jest wykonanie zestawu komend lista

to zazwyczaj wyra enie o nast puj cej postaci:  

 

[[ wyra enie_warunkowe ]] 

gdzie wyra enie_warunkowe mo e by  jedna z ni ej podanych konstrukcji: 

   

-a

 fname  

plik lub katalog o nazwie fname istnieje  

-d

 fname  

fname jest nazwa katalogu  

-f

 fname  

fname jest nazwa zwykłego pliku  

-w

 fname  

u ytkownik ma prawo zapisu pliku fname  

-x

 fname  

u ytkownik ma prawo wykonania pliku fname  

napis 

=

 wzorzec  

napis i wzorzec s  zgodne  

wyr1 

-eq

 wyr2  

warto ci wyra e  wyr1 i wyr2 s  równe; zamiast 

-eq

 mo na u y : 

-ne

 (ró ne), 

-lt

 

(mniejsze), 

- gt

 (wi ksze), 

-le

 (mniejsze lub równe), 

- ge

 (wi ksze lub równe)  

war1 

||

 war2  

alternatywa warunków war1 i war2  

war1 

&&

 war2  

koniunkcja warunków war1 i war2  

!war  

negacja warunku war  

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

Mo liwych wyra e  warunkowych jest zwykle wi cej (zale y to od rodzaju powłoki, najbogatsze 

mo liwo ci ma powłoka 

zsh

), powy ej wymieniono te, które s  najcz ciej u ywane.  

Innym sposobem okre lenia warunku jest komenda  

test

 warunek 

lub (równowa nie)  

[

 warunek 

 

Komenda 

test

  zwraca  warto   zero  je li  warunek  jest  spełniony,  i  warto   ro n   od  zera  w 

przeciwnym  przypadku.  Jako  warunku  mo na  tak e  u y   dowolnej  komendy  lub  listy  komend  - 

warunek  b dzie  spełniony  je li  komenda  taka  zako czy  si   sukcesem,  tj.  zwróci  status  wyj cia 

równy zeru; w przeciwnym przypadku warunek nie b dzie spełniony.  

P

RZYKŁAD 

6.1.1 

   if  [[ "$1" = '-h' ]] 
   then 
      echo Sposób u ycia: 
      echo    prog  [-h]  plik1  plik2  ... 
   fi 
   if  test -f /tmp/xxx 
   then 
      rm  /tmp/xxx 
   fi 

 

Oprócz opisanej powy ej, mo na u y  bardziej rozbudowanych postaci instrukcji warunkowej:  

 

   if 

warunek 

   then  

       lista1 

   else  

       lista2 

   fi 
   if  

warunek1 

   then  

lista1 

      elif  

warunek2

   

      then  

lista2 

         elif  

warunek3

   

         then  

lista3 

      ... 
   else 

lista 

   fi 
 

W pierwszej z powy szych postaci lista1 zostanie wykonana je li warunek jest spełniony, a lista2 - 

je li nie jest. W drugim przypadku je li spełniony jest warunek1, to zostanie wykonana lista1. Je li 

nie b dzie on spełniony, to zostanie sprawdzony warunek2, i je li b dzie on spełniony, to wykonana 

zostanie lista2 itd. Je li  aden z warunków: warunek1warunek2warunek3 ... nie jest spełniony, to 

zostanie wykonana lista wyst puj ca po klauzuli 

else

.  

 

 

 

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

 

P

RZYKŁAD 

6.1.2 

if  [[  -d  $1  ]] 
   echo Usuwam wszystkie pliki z katalogu $1 
   rm  $1/* 
elif  [[  -f  $1  ]] 
   echo Usuwam plik $1 
   rm  $1 
else 
   echo  Nie znaleziono pliku ani katalogu o nazwie $1 
fi 

6.2. Instrukcja wyboru 

Instrukcja  wyboru  pozwala  wybra   jeden  z  kilku  wariantów  (zale nie  od  warto ci  argumentu). 

Ogólna posta  instrukcji jest nast puj ca:  

 

   

case

 

słowo

 

in

 

      

wzorzec1

 ) 

lista1

 ;; 

      

wzorzec2

 ) 

lista2

 ;; 

      ... 
   

esac 

 

Je eli słowo i wzorzec1 s  zgodne, to zostan  wykonane komendy lista1. Je li nie, to sprawdzana 

jest zgodno  wyra e  słowo i wzorzec2, i w przypadku, je li ta zgodno  zachodzi, wykonywana 

jest lista2, itd. Nale y zwróci  uwag ,  e kolejne listy s  ko czone podwójnym  rednikiem (ka da 

lista mo e składa  si  z kilku komend oddzielonych pojedynczymi  rednikami).  

P

RZYKŁAD 

6.2.1 

   case $2 in 
      y* ) echo Yes ;; 
      n* ) echo No  ;; 
      *  ) echo Maybe ;; 
   esac 
 

W  powy szym  przykładzie  je li  drugi  parametr  pozycyjny  zaczyna  si   na  liter  

y

,  to  zostanie 

wypisane słowo 

Yes

; je li zaczyna si  on na liter  

n

, zostanie wypisane słowo 

No

. Je li parametr ten 

zaczyna si  innym ni  

y

 lub 

n

 znakiem, zostanie wypisane słowo 

Maybe

.  

6.3. P tle 

P tla  słu y  do  wielokrotnego  wykonania  ci gu  instrukcji.  W  omawianych  w  niniejszym 

opracowaniu powłokach wyst puj  trzy podstawowe rodzaje p tli: 

for

while

 i 

until

. P tla 

for

 

pozwala  wykona   ci g  instrukcji  sci le  okre lon   liczb   razy.  Ogólna  posta   instrukcji  jest 

nast puj ca:  

 

for

 zmienna 

in

 słowo1 słowo2 ...  

do

  

lista 

done 

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

10 

Zmiennej  zmienna  przypisywana  jest  warto   słowo1,  i  dla  tak  zdefiniowanej  zmiennej 

wykonywane  s   komendy  lista.  Nast pnie  zmienna  przyjmuje  warto   słowo2,  wykonywana  jest 

lista, itd.  

P

RZYKŁAD 

6.3.1 

Aby przenie  wszystkie pliki o nazwach zaczynaj cych si  na liter  

a

 do katalogu 

Afiles

 nale y 

u y  konstrukcji:  

   for i in a* 
   do 
      mv $i Afiles/ 
   done 
 

Pozostałe dwa rodzaje p tli pozwalaj  na wykonanie ci gu polece  lista w zale no ci od tego, czy 

warunek  (którym  mo e  by   wyra enie  warunkowe,  komenda  lub  nawet  lista  komend)  jest 

spełniony.  Ogólna  posta   obu  konstrukcji  jest  pokazana  poni ej.  W  instrukcji 

while

  warunek 

sprawdza  si   na  pocz tku,  i  lista  jest  wykonywana  tak  długo,  jak  długo  warunek  jest  spełniony. 

Oczywi cie  lista  powinna  zawiera   instrukcje  wpływaj ce  na  warunek,  gdy   w  przeciwnym 

przypadku  instrukcja 

while

  albo  nie  wykonałaby  si   ani  razu,  albo  wykonywałaby  si   w 

niesko czono .  W  p tli 

until

  warunek  sprawdzany  jest  na  ko cu,  i  p tla  wykonywana  jest  tak 

długo, jak długo warunek nie jest spełniony.  

 

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 :  # P tla niesko czona, która nic nie robi 
   do 
   : 
   done 
 

W li cie komend wyst puj cej po słowie 

do

 mo na u y  komend  

break

 - przerwanie p tli  

continue -

 powrót do pocz tku p tli  

6.4. Funkcje 

Ci g polece  mo na zdefiniowa  (np. na pocz tku skryptu) jako funkcj , a nast pnie wielokrotnie 

wykorzystywa   t   funkcj   w  ró nych  miejscach  skryptu  z  ró nymi  parametrami.  Funkcje  mo na 

zdefiniowa  w jeden z nast puj cych sposobów:  

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

11 

function

 fname 

{

 lista

; }

 

lub  

fname 

() {

 lista

; }

 

gdzie fname jest nazw  funkcji.  

P

RZYKŁAD 

6.4.1 

   function swapshvar 
   {  if [ $# != 2 ] 
      then 
         echo Zła liczba argumentów funkcji swapshvar 
      fi 
      eval tmp=\$$1 
      eval $1=\$$2 
      eval $2=\$tmp 
   } 
   x=XX;   y=YY 
   a=AA;   b=BB 
   swapshvar  x y 
   swapshvar  a b 
   echo  x=$x, y=$y, a=$a, b=$b 

W  powy szym  przykładzie  funkcja 

swapshvar

  zamienia  warto ci  dwóch  zmiennych  powłoki, 

których nazwy s  podane jako argumenty funkcji.  

6.5. Inne konstrukcje powłoki 

List  komend mo na zamkn  w nawiasy okr głe:  

(

 lista 

)

 

lub klamrowe  

{

 lista

; }

 

W pierwszym przypadku lista jest wykonywana w osobnym  rodowisku, w drugim - w tym samym 

rodowisku co powłoka macierzysta (opisywane konstrukcje w powłoce Bourne'a maja nieco inne 

działanie).  

P

RZYKŁAD 

6.5.1 

    $ 

pwd 

    /home/janek 
 
    $ 

(cd .. ; pwd) 

    /home 
 
    $ 

pwd 

    /home/janek 

7. Przyporz dkowanie strumieni we/wy 

Przy  otwarciu  pliku  jego  dane  pami tane  s   w  tablicy  plików.  Indeks  do  tej  tablicy  nazywamy 

deskryptorem pliku. Zazwyczaj programy  wykonuj ce operacje wej cia/wyj cia okre laj  plik lub 

urz dzenie b d ce  ródłem b d  odbiorc  informacji nie poprzez nazw  pliku, ale przez deskryptor 

tego pliku.  

Nast puj ce deskryptory s  zarezerwowane:  

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

12 

0  standardowe wej cie (standardowo zwi zane z klawiatur  terminala),  

1  standardowe wyj cie (standardowo zwi zane z monitorem terminala),  

2  standardowe wyj cie diagnostyczne (standardowo zwi zane z monitorem terminala). 

 

Dzi ki  deskryptorom  mo liwa  jest  bardzo  łatwa  zmiana  przyporz dkowania  strumieni  we/wy. 

Powłoka jest wyposa ona w specjalne mechanizmy ułatwiaj ce takie operacje.  

• 

Zmiana standardowego wej cia:  

prog ... 

<

fname  

 

U ycie tej konstrukcji spowoduje,  e standardowym wej ciem programu prog b dzie nie klawiatura 

terminala, ale plik o nazwie fname.  

Konstrukcja (nazywana dokumentem wbudowanym, ang. here document):  

 prog ... 

<<

EOF

  

 ...

  

 

EOF

 

spowoduje,  e  linie  od  wyst puj cej  bezpo rednio  za  komenda  prog  a   do  linii 

EOF

  b d  

standardowym wej ciem dla komendy prog

EOF

 mo e by  dowolnym ci giem znaków, wa ne jest 

jedynie  by  do  zako czenia  dokumentu  wbudowanego  u y   tego  samego  ci gu  znaków,  którego 

u yto po podwójnym znaku mniejszo ci.   

• 

Zmiana standardowego wyj cia:  

   

prog ... 

>

fname 

U ycie  tej  konstrukcji  spowoduje,  e  standardowym  wyj ciem  programu  prog  b dzie  nie  ekran 

monitora,  ale  plik  o  nazwie  fname.  Zamiast  pojedynczego  mo na  u y   podwójnego  znaku 

wi kszo ci:  

   

prog ... 

>>

fname 

Spowoduje  to,  e  standardowe  wyj cie  programu  prog  zostanie  dopisane  na  ko cu  pliku  fname.  

   

• 

Zmiana standardowego wyj cia diagnostycznego:  

  

prog ... 

2>

fname 

U ycie tej konstrukcji spowoduje,  e standardowe wyj ciem diagnostyczne programu prog b dzie 

skierowane do pliku o nazwie fname.  

Opisany powy ej mechanizm zmiany przypisania standardowych strumieni wej cia/wyj cia mo na 

stosowa  do strumieni opisanych dowolnymi deskryptorami, np. zapis:  

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

13 

prog ... 

<&

d1 

>&

d2 

 

oznacza,  e  wej ciem  komendy  prog  b dzie  plik  o  deskryptorze  d1,  a  jego  wyj ciem  -  plik  o 

deskryptorze d2. Cz sto stosowan  konstrukcj  jest:  

 

prog  

1>

fname  

2>&1 

 

Konstrukcja  taka  oznacza,  e  standardowe  wyj cie  (deskryptor 

1

  mo na  tu  opu ci )  b dzie 

skierowane do pliku fname, a standardowe wyj cie diagnostyczne - tam gdzie wskazuje deskryptor 

1

, zatem tak e do pliku fname.  

8. Skrypty 

Przy  pisaniu  skryptów,  które  maj   by   wykonywane  przez  powłok ,  nale y  pami ta   o  kilku 

sprawach.   

Je li chcemy wykona  skrypt podobnie jak ka d  inn  komend , tj. przez napisanie nazwy skryptu 

z list  parametrów, to skrypt taki winien mie  nadany atrybut 

x

. Skrypt  mo na wykona  tak e w 

nast puj cy sposób:  

sh

 

<

skrypt 

(oczywi cie  zamiast 

sh

  mo na  u y   nazwy  innej  powłoki).  W  obu  przypadkach  skrypt  zostanie 

wykonywane  w  osobnej  powłoce.  Oznacza  to  m.in.  e  w  czasie  wykonywania  skryptu  nie  b d  

widoczne  niewyeksportowane  wcze niej  zmienne  powłoki,  a  zmienne  zdefiniowane  wewn trz 

skryptu znikn  po zako czeniu wykonywania si  skryptu.   

Skrypt mo e by  wykonany w ramach aktualnej powłoki za pomoc  specjalnej komendy 

.

 

(kropka):  

 skrypt ... 

W ten sposób mo na wykona  tak e skrypt, któremu nie nadano atrybutu 

x

.  

   

Parametry przekazywane w linii komendy s  dost pne wewn trz skryptu jako zmienne powłoki 

$1

$2

, ... itd. U ycie wewn trz skryptu komendy    

shift

 

spowoduje przesuni cie o jedn  pozycj , tj. 

$1

 b dzie drugim argumentem z linii komendy, 

$2

 - 

trzecim itd.  

   

Programista tworz cy skrypt mo e narzuci  powłok , która ma wykona  skrypt. Winien w tym celu 

poda   w  pierwszej  linii  nazw   tej  powłoki  (pełn   cie k   dost pu)  poprzedzona  znakami 

"magicznymi" 

#!

, np.:  

#!/bin/ksh

 

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

14 

P

RZYKŁAD 

8.1 

#!/bin/bash 

 

Zapis ten oznacza to,  e do przetworzenie skryptu zostanie u yta powłoka bash. 

Przykładowy skrypt mo e wygl da  nast puj co : 

#!/bin/bash 
# to jest tylko komentarz 
echo 'skrypt wyswietla aktualny katalog roboczy' 
echo -e "biezacy katalog :\n\a`pwd`"

 

  

#!/bin/bash 
echo "informacje o uruchomionym skrypcie" 
echo "nazwa skryptu : $0" 
echo "ilosc parametrow : $#" 
echo "pierwszy parametr to : $1" 
echo "drugi parametr to : $2" 
echo -e "zestawienie wszytkich parametrow :\n$*"

 

 9. Konfiguracja powłoki 

Niektóre  aspekty  sposobu  działania  powłoki  mo na  zmienia   za  pomoc   tzw.  przeł czników 

powłoki. Przeł czniki takie s  ustawiane za pomoc  komendy  

set  +o

 opcja  

set -o

 opcja 

(znak 

+

  oznacza  wył czenie  przeł cznika  opcja,  znak 

-

  jego  wł czenie).  Liczba  i  znaczenie 

przeł czników s  zale ne od powłoki. Wa niejsze przeł czniki to: 

 
allexport

 : automatyczne eksportowanie zmiennych powłoki  

ignoreeof

 : ignorowanie Ctrl-D (do zako czenia pracy konieczna jest komenda 

exit

)  

noexec

 : sprawdzana jest poprawno  syntaktyczna komend (bez ich wykonania)  

noglob

 : powłoka nie wykonuje generacji nazw plików  

nounset

 : u ycie niezdefiniowanej zmiennej powłoki jest traktowane jako bł d  

monitor

 : pozwala na u ycie komend sterowania zadaniami  

W powłoce Bourne'a (sh) komenda set akceptuje jedynie jednoznakowe kody przeł czników (por. 

man pages).  

Administrator systemu b d  u ytkownik mo e utworzy  skrypty startowe, tj. skrypty zawieraj ce 

komendy, które maja by  automatycznie wykonane po zalogowaniu si  u ytkownika (rozpocz ciu 

pracy  powłoki).  Skrypty  takie  maj   ustalone w  danej  powłoce  nazwy.  Poni ej wymieniono  pliki, 

które s  wykonywane po zalogowaniu przez powłoki Bourne'a, Korna i 

zsh

.  

Powłoka Bourne'a (

sh

/etc/profile

  

$HOME/.profile

 

background image

S

S

Y

Y

S

S

T

T

E

E

M

M

Y

Y

 

 

O

O

P

P

E

E

R

R

A

A

C

C

Y

Y

J

J

N

N

E

E

 – 

Laboratorium nr 4   

  

 

 

E  & MN © 2004

 

15 

Powłoka Korna: (

csh

/etc/profile

  

$HOME/.profile

  

$ENV

 

Powłoka 

zsh

:  

/etc/zprofile

  

$HOME/.zprofile

  

$HOME/.zshenv

  

$HOME/.zshrc

  

$HOME/.zlogin 

Pliki znajduj ce si  w katalogu 

/etc

 s  tworzone przez administratora i zwykły u ytkownik nie ma 

na nie wpływu. Zawieraj  one zwykle komendy, które musz  by  wykonane podczas logowania si  

ka dego  u ytkownika,  takie  jak  np.  wy wietlenie 

motd

,  ustawienie  cie ki  systemowej  czy 

sprawdzenie poczty. Pozostałe skrypty s  tworzone przez u ytkownika w jego prywatnym katalogu 

i z reguły ustawiaj  parametry powłoki odnosz ce si  do tego u ytkownika, np. rodzaj terminala, 

prywatne  katalogi  w  cie ce  dost pu,  nazwa  u ywanego  edytora  ASCII,  aliasy  itp.  Pliki 

$HOME/.profile

  (

$HOME/.zprofile

$HOME/.zlogin

)  wykonywane  s   (podobnie  jak  pliki  z 

katalogu 

/etc

) tylko przez powłok  loginow , pliki wskazywane przez zmienn  powłoki 

ENV

 (lub 

plik 

$HOME/.zshenv

  w  przypadku  powłoki 

zsh

)  -  je li  taka  zmienna  została  zdefiniowana  przez 

u ytkownika - s  wykonywane przez ka d  nowo uruchamian  przez u ytkownika powłok .  

10. Edycja linii komendy 

Przy  wprowadzaniu  polece   z  linii  komendy  cz sto  zachodzi  potrzeba  wprowadzenia  zmian  i 

poprawek.  Niestety,  sposób  edycji  linii  komendy  jest  ro ny  w  ró nych  powłokach.  Najmniejsze 

mo liwo ci  w  tym  wzgl dzie  ma  powłoka  Bourne'a,  gdzie  mo liwo ci  edycji  ograniczaj   si   do 

skasowania kilku ostatnio wprowadzonych znaków lub całej linii, i ponownego wprowadzenie na to 

miejsce poprawionego tekstu.  

Powłoki  Korna  i 

zsh

  pozwalaj   na  edycj   linii  komendy  w  podobny  sposób,  jak  to  si   robi  w 

edytorach 

vi

  lub 

emacs

.  U ytkownik  winien  przypisa   zmiennej  powłoki  EDITOR  warto  

odpowiadaj c   preferowanemu  edytorowi  (tj. 

EDITOR=vi

  lub 

EDITOR=emacs

).  Od  tego  momentu 

u ytkownik  mo e  u ywa   polece   odpowiedniego  edytora  do  wprowadzania  zmian  w  linii 

komendy. Mo liwe jest tak e:   

• 

przywoływanie poprzednio wydanych polece ,  

• 

automatyczne  uzupełnianie  przez  powłok   nazwy  pliku  lub  katalogu  po  napisaniu  przez 

u ytkownika kilku pierwszych znaków nazwy tego pliku/katalogu (je li znaki te pozwalaj  

w sposób jednoznaczny okre li , o jaki plik chodzi).  

Jedna  z  bardziej  cenionych  zalet  powłoki 

zsh

  jest  mo liwo   manipulacji  kursorem  w  obr bie 

edytowanej  linii  komendy  za  pomoc   klawiszy  kursora,  w  sposób  podobny  do  edytora  linii 

komendy z niektórych wersji systemu MS-DOS.