You are on page 1of 6

Linux podstawy programowanie w shell'u

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

15. Programowanie w shell'u


Shell moe by wykorzystany do tworzenia skryptw (procedur) stajcych si nowymi zleceniami systemowymi
Etapy tworzenia skryptu
a) utworzenie pliku ze zleceniami
b) uruchomienie skryptu shell'a- zlecenie sh bash (lub inny szhell)
np. /bin/bash nazwa_skryptu
c) ustawienie regu dostpu, wymagany jest dostp x (zlecenie chmod)
d) wykonanie skrytpu ./nazwa_skryptu (korzystnie jest umieci w katalogu /proced)
Nazwy skryptw Shell'a,
powinny by rne od nazw zlece systemowych. Nazwa nadana skryptowi przykrywa zlecenie systemowe (zaley to
od wartoci zmiennej PATH).
Zlecenia wewntrzne nie daj si przykry.
------------------------------------------------------------------------------15.1. Zmienne
-

parametry pozycyjne podawane przy wywoaniu


(odwoanie w skrypcie $1, $2....$i)

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
------------------------------------------------------------------------------

15.2. Konstrukcje programowe w shell'u


- dotyczy shell'i sh, ksh, bash
15.2.1 Komentarze
#
#! /bin/ sh- umieszczony na pocztku skryptu
powoduje, e skrypt bdzie wykonany przez shell sh
-----------------------------------------------------------------------------15.2.2 Dokumenty wewntrzne
zlecenie << ogranicznik
tresc1
tresc2
--ogranicznik
np. :

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

# lub [ test $ nazwisko!= "done"]! - oznacza przeczenie

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

echo Lub : $0 [-i]


exit
fi
case $1 in
-f) rm -f $2;;
-s) gzip $2; mv $2.gz $HOME/.KOSZ;;
-r) gunzip $HOME/.KOSZ/$2.gz; mv $HOME/.KOSZ/$2 .;;
-d) rm -f $HOME/.KOSZ/$2.gz;;
-i) mkdir $HOME/.KOSZ;;
*) echo Niewlasciwa opcja
esac
-----------------------------------------------------------------------------15.8. Zadania
1. Opracowa skrypt, ktra podane w parametrach pliki
a) kopiuje do podkatalogu /bin i wprowadza im uprawnienia

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.

You might also like