background image

 

 

Wykład 13

System operacyjny 

Linux

Skrypty powłoki

background image

 

 

Powłoka (shell) - 

przypomnienie

Powłoka

  (ang. 

shell

)  to  pośrednik 

między 

systemem 

operacyjnym 

użytkownikiem. 

Jej 

zadaniem 

jest 

interpretacja komend wydawanych przez 

użytkow-nika. 

Zazwyczaj 

komendy 

powłoki 

dają 

możliwość 

tworzenia 

prostych programów - skryptów. Skrypty 

służą 

głównie 

zadaniom 

administracyjnym  (operacje  na  plikach, 

katalogach),  powłoka  nie  udostępnia 

bowiem zbyt bogatej arytmetyki.

background image

 

 

Powłoka (shell) - 

przypomnienie

System  Linux  nie  jest  związany  z 

konkretną 

powłoką 

najczęściej 

używane  to 

bash

  oraz 

csh

.  Różnice 

między  nimi  dotyczą  przede  wszystkim 

składni 

komend 

oraz 

sposobu 

posługiwania się zmiennymi.

My  wykorzystamy  powłokę  csh,  a  zatem 

na początku każdego skryptu umieścimy 

jej wywołanie:

#!/bin/csh

background image

 

 

Zmienne

Skrypt  może  korzystać  ze  zmiennych, 

które trakto-wane są  jak ciągi znaków - 

nie  mają  typu  np.  liczbo-wego.  Po 

nadaniu  wartości  dostęp  do  danej 

zmiennej 

jest 

możliwy 

przez 

poprzedzenie jej nazwy znakiem 

$

#!/bin/csh

setenv x 20

echo $x

background image

 

 

Zmienne środowiskowe

Powłoka 

tworzy 

specjalne 

zmienne 

„środowiskowe”  opisujące  stan  systemu 

-  bieżący  katalog,  nazwę  użyt-kownika 

itp. 

Listę 

tych 

zmiennych 

podaje 

komenda 

env

;  oczywiście  nie  trzeba 

nadawać im wartości początkowej.

#!/bin/csh

echo $PWD ; echo $HOME

cd $HOME

background image

 

 

Zmienne środowiskowe

Niektóre przydatne zmienne:

HOME

 - katalog domowy

USER

 - login użytkownika

HOST

 - nazwa naszego komputera

PWD

 - bieżący katalog

PATH

 - katalogi, w których system szuka 

komend

SHELL

 - nazwa bieżącej powłoki

background image

 

 

Zmienne środowiskowe

„Skrypt powitalny”:

#!/bin/csh

echo „Witaj $USER !”

echo „Komputer $HOST życzy miłej pracy”

echo „Korzystasz z powłoki $SHELL”

background image

 

 

Interpretacja łańcucha 

znaków

Czym  różni  się  zapis 

echo  Witaj  $USER

 

od 

echo  „Witaj  $USER”

  lub 

echo  ‘Witaj 

$USER’

  ?  W  pierwszym  i  drugim 

przypadku  zamiast  $USER  zobaczymy 

swój login, w trzecim - apostrofy „zabez-

pieczą” 

nas 

przed 

podstawieniem 

wartości  zmiennej.  Pierwszy  i  drugi 

przypadek  też  się  różnią  - w pierw-szym 

mamy dwa elementy znakowe, w drugim 

zaś - jeden dwuwyrazowy łańcuch.

background image

 

 

Argumenty

Skrypt, 

jak 

prawdziwa 

komenda 

systemowa, może posługiwać się danymi 

przekazanymi 

przez 

użytkow-nika. 

Argumenty  z  linii  poleceń  dostępne  są 

pod nazwami 

$1

$2

$3

 ... zaś 

$*

 podaje 

całą  zawartość  linii  poleceń.  Zmienna 

$<

  powoduje  wczytanie  linii  tekstu  z 

klawiatury.  Zmienna 

$0

  podaje  nazwę 

pliku zawierającego skrypt.

background image

 

 

Argumenty

#!/bin/csh

echo „Skrypt $0 wita”

echo „Pierwszy argument to $1”

echo „Wpisz teraz coś”

setenv linijka $<

echo „A teraz ja powtarzam: $linijka”

Taki skrypt powinniśmy wywołać z 

argumentem, np.

./skrypt  argument1

background image

 

 

Instrukcja sterująca „if”

#!/bin/csh

echo „Podaj nazwę pliku”

setenv plik $<

if

 ( -e $plik ) 

then

echo „Ten plik istnieje”

else

echo „Tu nie ma takiego pliku!”

endif

background image

 

 

Wyrażenia logiczne

( -e $plik )

!( -e $plik )

    

„NEGACJA”

(( -e $plik1 ) && (-e $plik2))    

„I”

(( -e $plik1 ) || (-e $plik2))    

„LUB”

( $tekst1 == $tekst2 )

„RÓWNOŚĆ”

( $tekst1 != $tekst2 )

„NIERÓWNOŚĆ”

-e

 :plik istnieje

   

-r

 :mam prawo odczytu

-d

 :plik to katalog

   -w

 

-x

-z

 :plik jest pusty    

-l

 :plik to skrót

background image

 

 

Wyrażenia logiczne

#!/bin/csh
echo „Podaj nazwę pliku”
setenv plik $<

if

 (( -w $plik ) && (-z $plik)) 

then

   echo „Ten plik mogę skasować, jest pusty”
   rm $plik

else

   echo „Nie skasuję tego pliku”

endif

background image

 

 

Pętla „foreach”

#!/bin/csh

foreach

 x 

(

1 2 3 4 5

)

  echo Tworzę pusty plik o nazwie a${x}b
  touch a${x}b

end

Jeśli  nazwa  zmiennej  może  „wtopić  się” 

w  otaczający  tekst,  wydzielamy  ją 

nawiasami klamrowymi!

a${x}b

a$xb

background image

 

 

Pętla „foreach”

#!/bin/csh
unalias ls

foreach

 x 

(`ls `)

if (-d $x ) then
echo Plik $x to katalog
endif

end

Użyto  tutaj  odwróconych  apostrofów: 
`ls`  -  taka  kon-strukcja  wpisuje  w  dane 
miejsce  wynik  działania  komendy  (tutaj 
ls)  jako  zmienną  tekstową  -  linijkę 
tekstu.

background image

 

 

„switch” - instrukcja 

wyboru

#!/bin/csh

switch (

$1

)

case

 "a*"

:

 

 echo Argument zaczyna się od a
 

breaksw

case

 "b*"

:

 echo Argument zaczyna się od b
 

breaksw

default:

 echo Dziwny argument

endsw

background image

 

 

Pętla „while” („dopóki”)

#!/bin/csh
echo Wpisz coś
echo Aby zakonczyć wpisz KONIEC
setenv napis O

while (

$< != „KONIEC”

)

echo Jesteś w pętli WHILE
echo $napis
setenv napis ${napis}O

end


Document Outline