Professional Documents
Culture Documents
Spis treci
15. Programowanie w shell'u............................................................................................................................. ..........2
15.1. Zmienne....................................................................................................................................................................... ..........2
15.2. Konstrukcje programowe w shell'u...................................................................................................................... ..................2
15.2.1 Komentarze............................................................................................................................................................ ........2
15.2.2 Dokumenty wewntrzne........................................................................................................................................ .........2
15.2.3. Konstrukcja for.............................................................................................................................................. ................3
15.2.4. Konstrukcja while.......................................................................................................................................... ................3
15.2.5. Konstrukcja if................................................................................................................................................................ .4
15.2.6. Konstrukcja case....................................................................................................................................................... ....4
15.3. Bezwarunkowe konstrukcje sterujce...................................................................................................................................5
15.4. Wyraenia....................................................................................................................................................................... .......5
15.5. Funkcje............................................................................................................................................................... ...................5
15.6. Uruchamianie skryptw.................................................................................................................................. .......................5
15.7. Przykady......................................................................................................................................................... ......................5
15.8. Zadania........................................................................................................................................................................ ..........6
parametry specjalne
$ # - liczba parametrw
$ * - wszystkie parametry
$ ? - kod powrotu
$ 0 - nazwa skryptu
$ $ - id shell'a
$ ! - id ostatniego procesu w tle
- zmienne nazwane
nazwa = warto
- odwoanie
$nazwa
-
zmienne s lokalne w procesie, w ktrym zostay utworzone. Zmienne mog by przekazywane do procesw
potomnych - zlecenie export
nazwy zarezerwowane:
CDPATH
HOME
PS1
LOGNAME
MAIL
PATH
1
PS1
PS2
TERM
ustawienie wartoci zmiennej nazwanej
zmienna = warto
read zmienna
zmienna = `zlecenie`
zmienna = $1
------------------------------------------------------------------------------
skrypt zyczenia
mail $1 <<!
Wszystkiego dobrego
!
wywoanie:
bash zyczenia ewa
-----------------------------------------------------------------------------15.2.3. Konstrukcja for
Skadnia:
for zmienna
in lista_wartoci
do
zlec1
zlec2
--zlecn
done
Przykady:
for i in $*
do
echo $i
done
for i in ls *.txt
do
cat $i >> zbir.txt
done
-----------------------------------------------------------------------------15.2.4. Konstrukcja while
Skadnia:
2
while warunek_logiczny
do
zlec1
zlec2
-zlecn
done
Przykad:
echo -n "Podaj nazwisko:"
read nazwisko
while [ $nazwisko!="done" ]
do
useradd $nazwisko
echo -n "Podaj nazwisko:"
done
Sprawdzanie warunkw
test -r plik
test -w plik
test -x plik
test -s plik
-plik istnieje i ma co najmniej jeden znak
test -f plik
test -d plik
test var1 -eg var2
(liczbowo) rwne
test var1 -ne var2
(liczbowo) rne
-lt - mniejsze, - le - mniejsze/ rwne,
-qe - wiksze/rwne, - qt - wiksze od - starszy
test var1 = var2
znakowo
!=
rne
operatory:
and
or
!
not
test warunek_logiczny tosame z [ warunek_logiczny ]
np. test -w$1 -a -f $1 jest tosame z [ -w $1 -a -f $1 ]
------------------------------------------------------------------------------
a
o
15.2.5. Konstrukcja if
Skadnia:
if warunek_logiczny
then
zlec 1
zlec 2
---zlec n
else
zlec 1
zlec 2
---zlec n
fi
Przykad (zapisany w pliku checkmail):
interval = `expr $1 '*' 60`
# funkcja expr wylicza wyraenie
mail_file = `echo $MAIL`
oldlen = 'ls -l $mail_ file | awk '{print $5}'`
while [1]
# while [ 1 ] warunek zawsze prawdziwy
do
newlen = 'ls -l $mail_file | awk '{print $5}'`
if [$newlen -qt $olden]
then
echo "You've got mail"
fi
olden = $newlen
3
sleep $interval
done
wywoanie ./checkmail 1 &
-----------------------------------------------------------------------------15.2.6. Konstrukcja case
Skadnia:
case zmienna in
var1) zlec1; zlec2;....zlecn;;
var2) zlec1; zlec2;....zlecn;;
...........................................
...........................................
varn) zlec1; zlec2;....zlecn;;
*) zlec1; zlec2;....zlecn;;
esac
przykad
zapisany np. w pliku inf
case $1 in
-l) ls -l $2;;
-t) file $2;;
-w) wc $2;;
-s) read old; read new; sed 's/'$old'/'$new'/g $2';;
*) echo invalid option;;
esac
-----------------------------------------------------------------------------15.3. Bezwarunkowe konstrukcje sterujce
break ile_poziomw
- koczy wykonanie w miejscu wykrycia. Przenosi dziaanie za done, fi, esac;
continue ile_iteracji
- przejcie do nastpnej/ych iteracji do lub for bez wykonania pozostaych w ptli zlece;
exit
-zakoczenie skryptu
-----------------------------------------------------------------------------15.4. Wyraenia
- zlecenie expr
expr arg1 operator arg2
-operatory:
+ dodawania,
- odejmowania,
\* mnoenia,
/ dzielenia,
% reszta z dzielenia,
= porwnania,
\> wikszoci,
\< mniejszoci,
!= nierwnoci.
np.:
licz=`expr $licz + 1`
-----------------------------------------------------------------------------15.5. Funkcje
Skadnia:
nazwa_funkcji ()
{
4
zlecenia funkcji
;}
wywoanie :
nazwa_funkcji parametry
- funkcja jest wykonywana w ramach aktualnego procesu.
-----------------------------------------------------------------------------15.6. Uruchamianie skryptw.
- shell nazwa_skryptu, np.: /bin/sh/skrypt
- prawa na wykonanie: chmod 755 nazwa_skryptu;
./nazwa_skryptu
- polecenie tee wspomaga ledzenie potokw
oglnie: zlecenie | tee nplik | zlecenie
np.: who | grep ro | tee plik_tee | cut -c1-9
-----------------------------------------------------------------------------15.7. Przykady
Przykad 15.1
skrypt drukuje aktualny katalog
echo -n Wczytywanie zawartosci katalogu.....
ls -l $1 > /tmp/lstemp
echo gotowe
echo -n Formatowanie i drukowanie......
pr /tmp/lstemp | lpr
echo gotowe
echo -n Sprzatam.....
rm -f /tmp/lstemp
echo gotowe
Przykad 15.2
narzdzia administracyjne
while [ 1 ]
do
clear
g echo Menu zadan
echo 0 -> wyjscie
echo 1 -> zalogowani uytkownicy
echo 2 -> wykorzystanie katalogow uzytk.
echo 3 -> wykorzystanie dyskw
echo 4 -> usuniecie plikow core
echo 5 -> dodanie uzytkownika
echo 6 -> usuniecie uzytkownika
echo -n Wprowadz opcje
read opcja
case $opcja in
0) exit;;
1) who | more;;
2) du -S /home/* | more;;
3) df -h;;
4) find / -name core -exec rm -f {} \;;;
5) read grupa; read user; useradd -g $grupa $user;;
6) read user; userdel -e $user;;
*) echo Zla opcja
esac
read
done
#koczy while
Przykad 15.3
narzdzia plikowe
if [ $# -eq 0 ]
then
echo Skladnia : $0 [-f s r d i] plik
5
na wykonanie,
2. Opracowa skrypt podajcy nazwy wszystkich plikw i katalogw znajdujcych si w katalogu aktualnym i
katalogach pooonych poniej. Katalog poprzedzi liter K a plik - .
3. Opracowa skrypt usuwajcy pliki podane w argumentach. Dla kadego pliku wymagane jest potwierdzenie. Naley
umoliwi zakoczenie procedury w dowolnym momencie.
4. Opracowa skrypt usuwajcy pliki w podanym katalogu, ktre:
a) nie byy modyfikowane przynajmniej przez 100 dni,
b) nie byy otwierane przynajmniej przez 100 dni.
5. Napisa skrypt, ktry od wskazanego katalogu wypisze:
a) wszystkie pliki wykonywalne,
b) wszystkie pliki wykonywalne i sum zajmowan przez nie pamici dyskowej.
6. Napisa skrypt, ktry dla wskazanego uytkownika wypisze wszystkie jego pliki wykonywalne, ich czny rozmiar
a) wypisze dodatkowo rodzaj pliku (plecenie file),
b) sprawdzi przed przeszukiwaniem czy taki uytkownik istnieje w systemie.
7. Napisa skrypt, ktry wysyajcy do
a) wszystkich,
b) aktualnych
uytkownikw systemu ten sam tekst (np.. zawarto pewnego pliku)
8. Napisa skrypt przegldajcy wskazany katalog i jego podkatalogi i wypisujcy na ekran pierwszych 15 wierszy
pliku (jeli jest plikiem ASCII). Nastpnie pytajcy si czy dany plik ma zosta dopisany do pliku o nazwie zbir, jeli
tak ma zosta dopisany wpp nie.