You are on page 1of 40

Podstawy open source system SUSE Linux cz.

II 2-87
2.5 Podstawy programowania w bash'u 2.5 Podstawy programowania w bash'u
Powoa Linusa !est pro"ramowa#na$ mo%na u%ywa& edytora 'i do pisania
pro"ram(w.
)wy#e srypt powoi !est zapisany w p#iu testowym i zaczyna si*
nast*pu!+cym wierszem ,zwanym s-ee-.an" #ine/0
#! /bin/bash
Po napisaniu$ a przed pr(.+ .ezpo1rednie"o uruc-omienia sryptu onieczne
!est nadanie mu atry.utu wyonywa#no1ci ,p#i wyonywa#ny/ po#eceniem0
chmod u+x skrypt_bash
2ewn+trz sryptu mo%na stosowa& wszystie po#ecenia omawiane wcze1nie!
w podr*czniu. Po#ecenie ec-o mo%emy stosowa& do wy1wiet#ania testu na
eranie #u. %+dania zawarto1ci zmienne!.
Przyad0
#!/bin/bash
echo 'The content of variable $PATH is:' $PATH
Po wyonaniu sryptu$ mo%emy przyadowo otrzyma& wy!1cie w postaci0
geeko@da51:~> ./bash_script
The content of variable $PATH is: /home/geeko/bin:/usr/local/bin:/usr/bin:/usr/X
11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin:/usr/
lib/mit/bin:/usr/lib/mit/sbin
geeko@da51:~>
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
)wy#e zna # !est stosowany do oznaczania testu omentarza.
7omentarze nie s+ interpretowane i wyonywane.
8edynym wy!+tiem od t! zasady !est wiersz s-ee-.an".
Podstawy open source system SUSE Linux cz. II 2-88
2.5. !mienne w s"ryptach bash 2.5. !mienne w s"ryptach bash
2 ostatnim przyadzie u%ywa#i1my zmienne! 9P4:;. <o%na de=iniowa& swo!e
wasne zmienne wy+cznie do u%ytu wewn+trz dane"o sryptu.
Skadnia: nazwa_zmiennej=warto
#!/bin/bash
myvar=13
echo 'The content of variable $myvar is:' $myvar
>y po.ra& zawarto1& zmienne! ,np. po#eceniem ec-o/ trze.a doda& zna
9 przed nazw+ zmienne!.
)mienne mo"+ przec-owywa& #icz.y$ znai$ ci+"i testowe.
?@A.inA.as-
aB2
.Bx
cBCeeo
dBDCeeo and SuzieD
ec-o E9a is a num.er0E 9a
ec-o E9. is a c-aracter0E 9.
ec-o E9c is a strin"0E 9c
ec-o E9d is a strin" wit- w-itespaces0E 9d
2yni wyonania sryptu0
$a is a number: 2
$b is a character: x
$c is a string: Geeko
$d is a string with whitespaces: Geeko and Suzie
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
F.owi+zu!e zasada u%ywania mayc- #iter d#a
nazw zmiennyc- wewn+trz odu pro"ramu.
:y#o stae ,t(re nie zmienia!+ warto1ci podczas
wyonywania pro"ramu/ s+ pisane du%ymi
#iterami.
Podstawy open source system SUSE Linux cz. II 2-8G
#wic$enie. %ypy $miennych #wic$enie. %ypy $miennych
Licz.y mo"+ .y& dodawane$ ci+"i testowe nie. H#a wie#u operac!i !est to
wa%ne$ wi*c na#e%y odpowiednio u%ywa& tyc- typ(w warto1ci zmiennyc-.
)apisz poni%e! po cztery typowe operac!e d#a #icz. i ci+"(w zna(w.
operac!e d#a #icz.0 operac!e d#a ci+"(w zna(w0
IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIII
2.5.2 &blic$enia numeryc$ne 2.5.2 &blic$enia numeryc$ne
)mienne cz*sto s+ +czone z operatorami matematycznymi$ su%+ do r(%nyc-
o.#iczeJ. )mienne #icz.owe mo"+ .y&0
dodawane ,operator KLM/
ode!mowane ,operator K-M/
mno%one ,operator KNM/
dzie#one ,operator KAM/
dzie#one modu#o ,operator KOM/
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-GP
&blic$enia na lic$bach ca'"owitych &blic$enia na lic$bach ca'"owitych
2 poni%szym przyadzie zapiszemy sum* zmiennyc- 9a i 9. do nowe!
zmienne!0
?@A.inA.as-
a=3
b=2
c=$a+$b
echo '$a+$b='$c
2yniiem mo%e .y& przyadowo0
$a+$b=3+2
8a wida&$ zmienna 3 zawiera aJcuc- KQ L 2$M a nie sum* K6M@ >y uzysa&
sum* mamy nast*pu!+ce mo%#iwo1ci0
Fre1#i&$ %e zmienna 9c mo%e przec-owywa& wy+cznie #icz.y ,dane
numeryczne/.
>y to zro.i&$ na#e%y u%y& do !e! de#arac!i - =unc!i declare z opc!a (i )
#!/bin/bash
a=3
b=2
declare -i c=$a+$b
echo '$a+$b='$c
Fznaczy& dziaanie ,=ormu*/ !ao wyra%enie$ t(re powinno .y&
wyonane0
>y wymusi& o.#iczenie w wierszu po#eceJ$ na#e%y u%y& po#ecenia e*pr0
geeko@da51:~ > expr 3 + 2
5
geeko@da51:~ >
+waga. 2 odr(%nieniu od metody z =unc!+ dec#are$ przy =unc!i expr
musz+ .y& spac!e oddzie#a!+ce operatory od ar"ument(w.
8e%e#i u%y!emy =unc!i expr w srypcie powoi$ musimy zamn+& cae
wyra%enie w cudzysowie po!edynczym ,KE M/ #u. poprzedzi& znaiem 9.
)nai spec!a#ne"o przeznaczenia musz+ .y& masowane uo1niiem KRM.
#!/bin/bash
a=3
b=2
c=$(expr $a + $b)
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-GS
echo '$a+$b='$c
2yra%enie wewn+trz 9,.../ !est zast*powane wyniiem dziaania.
2 rezu#tacie otrzymamy$ przyadowo0
$a+$b=5
Spr(.u!my przeana#izowa& przyad z dzie#eniem zmiennyc-.
#!/bin/bash
a=3
b=2
c=$(expr $a / $b)
echo '$a/$b='$c
2yni !est mo%e .y& niez"odny z oczeiwanym0
$a/$b=1
2yni dzie#enia !est #icz.+ caowit+ .ez mie!sc po przecinu. Teszt* dzie#enia
mo%emy otrzyma& !e%e#i u%y!emy operatora modu#o0
#!/bin/bash
a=3
b=2
c=$(expr $a / $b)
d=$(expr $a % $b)
echo '$a/$b='$c Rest:$d
)amiast =unc!i expr$ mo%na u%y& sadni 9,,...//
Przyad0
#!/bin/bash
a=3
b=2
c=$(($a + $b))
echo '$a+$b='$c
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-G2
#wic$enie. &blic$anie na lic$bach ca'"owitych #wic$enie. &blic$anie na lic$bach ca'"owitych
5apisz srypt .as-$ t(ry podnosi do wadratu #icz.y0 U$ G oraz S2.
&blic$enia na lic$bach $miennopr$ecin"owych &blic$enia na lic$bach $miennopr$ecin"owych
Homy1#nie$ .as- nie mo%e wyonywa& o.#iczeJ zmiennoprzecinowyc-.
#!/bin/bash
a=3
b=2.7
c=$(expr $a + $b)
echo '$a+$b='$c
Ten skrypt da w wyniku:
expr: non-numeric argument
$a+$bB
>y pro.#em rozwi+za&$ na#e%y u%y& dodatowe"o narz*dzia powoi o nazwie
.c. 8est to doadny a#u#ator$ t(re"o mo%na u%ywa& w wierszu po#eceJ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
geeko@da51:~> bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3+4
7
(10+4)/2
7
2+0.44
2.44
7/3
2
quit
,y-a.nienie. Po#eceniem .c uruc-amiamy a#u#ator iwprowadzamy wyra%enie
do o.#iczenia ,wiersze U$8$SP i S2/. >y zo.aczy& wyni o.#iczeJ$ na#e%y nacisn+&
Enter na #awiaturze ,wiersze 7$G$ SS i SQ/. 2yra%enia mo%na "rupowa& stosu!+c
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-GQ
nawiasy ,wiersz 8/. <o%na u%ywa& #icz. zmiennoprzecinowyc- ,wiersz SP/.
Homy1#nie$ .c u%ywa te"o same"o przetwarzania przy dzie#eniu ,.ez mie!sc po
przecinu/$ co powoa ,wiersze S2LSQ/. >y zaoJczy& prac* z a#u#atorem$
na#e%y napisa& Vuit ,wiersz SW/.
bc ma wasny !*zy pro"ramowania$ a#e to tuta! nie ma znaczenia. >y u%ywa&
bc wewn+trz sryptu .as-$ u%ywa si* proste"o Kwy.ie"uM0 potou!e wyra%enie
w bc.
Polecenie echo i poto" /010
geeko@da51:~> echo "2.4+7" | bc
9.4
>y zapami*ta& wyni o.#iczeJ a#u#atorem .c$ wyra%enie umieszcza si*
w po!edynczym odwrotnym cudzysowie0
geeko@da51:~> a=`echo "2.4+7" | bc`
geeko@da51:~> echo $a
9.4
)amiast cudzysowia$ mo%na u%y& sadni 23...40
geeko@da51:~> a=$(echo "2.4+7" | bc)
geeko@da51:~> echo $a
9.4
5ie ma znaczenia$ t(r+ sadni* wy.ierzesz. 2 podr*czniu u%ywamy te!
dru"ie!.
>y zo.aczy& mie!sca po przecinu$ napisz scale5lic$ba przed operac!+
matematyczn+ oddzie 1redniiem KXM.
Przyad0
geeko@da51:~> echo "scale=2; 9/2" | bc
4.50
#wic$enie. #wic$enie.
&blic$anie na lic$bach $miennopr$ecin"owych &blic$anie na lic$bach $miennopr$ecin"owych
5apisz srypt .as-$ t(ry podnosi do wadratu #icz.y0 S$6X 2$76 oraz 7$2.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-GW
2.5.6 Por7wnywanie pli"7w8 'a9cuch7w i lic$b 2.5.6 Por7wnywanie pli"7w8 'a9cuch7w i lic$b
Ho odrycia$ %e Q !est wi*sze ni% 2 nieoniecznie trze.a pisa& srypt .as-Ea X-/.
8edna w interacy!nyc- pro"ramac- po!awia si* wie#e pytaJ i ac!a pro"ramu
za#e%y od odpowiedzi na nie.
<o"+ to .y& przyadowo pytania nast*pu!+ce0
3zy istnie!e p#i nazwaIp#iuY
7iedy p#i zosta zapisanyY
8a odpowiedzia u%ytowni na ore1#one pytanieY
3zy warto1& zmienne! !est w ore1#onym$ dopuszcza#nym$ zaresieY
I#e razy zostaa wyonana dana p*t#aY
Ho sprawdzania odpowiedzi su%y po#ecenie test. 2yniiem po#ecenia test !est
a#.o K0M ,prawda/ a#.o KM ,=asz/. 2yni ten !est przec-owywany w zmienne!
K2:M.
Po#ecenie test ma .ardzo du%o parametr(w.
2 pierwsze! o#e!no1ci om(wimy parametry dotycz+ce p#i(w0
(d cel sprawdza$ czy ce# !est istnie!+cym ata#o"iem0
#!/bin/bash
a=/var
b=/etc/profile
test -d $a
echo $a: $?
test -d $b
echo $b: $?
Poni%e! podano wyni wyonania po#ecenia 0
/var: 0
/etc/profile: 1
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-G6
(e cel sprawdza$ czy ce# !est istnie!+cym p#iiem0
#!/bin/bash
a=/var
b=2
test -e $a
echo $a: $?
test -e $B
echo $b: $?
2yniiem mo%e .y&0
/var: 0
2: 1
(; cel sprawdza$ czy ce# istnie!e i !est norma#nym p#iiem0
#!/bin/bash
a=/var
b=/etc/profile
test -f $a
echo $a: $?
test -f $b
echo $b: $?
2yni wy"#+da mnie! wi*ce! ta0
/var: 1
/etc/profile: 0
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-GU
(r cel8 (w cel8 (* cel sprawdza$ czy u%ytowni ma ore1#one
uprawnienia0
odczytu ,-r/$
zapisu ,-w/$
wyonania ,-x/
#!/bin/bash
a=/etc/profile
test -r $a
echo "Read: $?"
test -w $a
echo "Write: $?"
test -x $a
echo "Execute: $?"
Plik /etc/profile ma nastpujce uprawnienia: rw-rr-- . Uytkownik Geeko moe
tylko czyta ten plik.
Rezultat polecenia bdzie mia posta:
Read: 0
Write: 1
Execute: 1
(s cel sprawdza$ czy p#i !est pusty0
#!/bin/bash
a=/etc/profile
test -s $a
echo $?
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-G7
Tezu#tatem wyonania po#ecenia test powinno .y& KPM.
pli" (nt pli"2 sprawdza$ czy p#i pli" !est nowszy od pli"2. Por(wnu!e
daty ostatnie! mody=iac!i$ a nie utworzenia.
#!/bin/bash
a=/etc/profile
b=/var/log/Xorg.0.log
test $a -nt $b
echo "$a -nt $b:" $?
2yni powinien .y& r(wny KSM ,=asz/0
/etc/profile -nt /var/log/Xorg.0.log: 1
pli" (ot pli"28 odwrotnie ni% -nt8 sprawdza$ czy p#i pli" !est starszy
od pli"2. Por(wnu!e daty ostatnie! mody=iac!i$ a nie utworzenia.
#!/bin/bash
a=/etc/profile
b=/var/log/Xorg.0.log
test $a -ot $b
echo "$a -ot $b:" $?
2yni powinien .y& KSM ,=asz/0
/etc/profile -ot /var/log/Xorg.0.log: 0
#wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b #wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b
< < c$=.> I c$=.> I
5apisz srypt .as-$ t(ry...
Z sprawdza$ czy istnie!e p#i A'arA#o"Amessa"es$
Z czy !est on pusty$ oraz
Z wy1wiet#a !e"o prawa dost*pu.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-G8
:est mo%e sprawdza& i por(wnywa& ci+"i zna(w.
($ 'a9cuch po#ecenie sprawdza$ czy aJcuc- zna(w !est pusty0 wyni
!est r(wny KPM ,prawda/$ "dy ci+" zna(w aJcuc- !est zerowy0
#!/bin/bash
a=geeko
test -z $a
echo "a: $?"
test -z $b
echo "b: $?"
2yni po#ecenia tym przypadu .*dzie wy"#ada nast*pu!+co0
a: 1
b: 0
2y!a1nienie. Poniewa% zmienna 9. nie !est zde=iniowana$ ma du"o1& BMPM
i wyniiem sprawdzenia !est KprawdaM.
(n 'a9cuch8 po#ecenie odwrotne do K-zM$ sprawdza$ czy aJcuc- zna(w
!est niepusty0 wyni !est r(wny KPM ,prawda/$ "dy aJcuc- zawiera co
na!mnie! !eden zna.
#!/bin/bash
a=geeko
test -n $a
echo "a: $?"
test -n $b
echo "b: $?"
2yni dziaania sryptu0
a: 0
b: 1
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-GG
'a9cuch 55 'a9cuch2 wyniiem !est KprawdaM ,KPM/$ "dy ci+"i zna(w
s+ identyczne.
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
a=geeko
b=suzie
c=geeko
test $a == $b
echo "$a == $b: $?"
test $a == $c
echo "$a == $c: $?"
,y-a.nienie. )mienne s+ de=iniowane w wierszac- Q-6$ zmienne 9a oraz 9c s+
taie same. w wierszu 7 s+ por(wnywane zmienne 9a i 9.$ a w wierszu SP
- por(wnywane s+ zmienne 9a i 9c.
2yni0
geeko == suzie: 1
geeko == geeko: 0

'a9cuch ?5 'a9cuch2 wyniiem !est KprawdaM ,KPM/$ "dy ci+"i zna(w
s+ r(%ne.
#!/bin/bash
a=geeko
b=suzie
c=geeko
test $a != $b
echo "$a != $b: $?"
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SPP
test $a != $c
echo "$a != $c: $?"
2yni0
geeko != suzie: 0
geeko != geeko: 1
#wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b #wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b
< < c$=.> II c$=.> II
5apisz srypt .as-$ t(ry sprawdza czy aJcuc- KLinuxM i aJcuc-
Keduac!aM s+ r(wne ,identyczne/.
8est te% i#a operator(w do por(wnywania #icz..
lic$ba (e@ lic$ba2 sprawdza czy o.ie #icz.y s+ r(wne.
#!/bin/bash
a=3
b=2
test $a -eq $b
echo "$a -eq $b: $?"
wyni0
3 -eq 2: 1
lic$ba (ne lic$ba2 sprawdza czy o.ie #icz.y s+ r(%ne.
#!/bin/bash
a=3
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SPS
b=2
test $a -ne $b
echo "$a -ne $b: $?
wyni0
3 -ne 2: 0
lic$ba (gt lic$ba2 sprawdza czy #icz.aS !est wi*sza ni% #icz.a2.
#!/bin/bash
a=3
b=2
test $a -gt $b
echo "$a -gt $b: $?"
test $b -gt $a
echo "$b -gt $a: $?"
wyni0
3 -gt 2: 0
2 -gt 3: 1
lic$ba (ge lic$ba2 sprawdza czy #icz.aS !est wi*sza #u. r(wna ni%
#icz.a2.
#!/bin/bash
a=3
b=2
c=3
test $a -ge $b
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SP2
echo "$a -ge $b: $?"
test $a -ge $c
echo "$a -ge $c: $?"
wyni testu0
3 -ge 2: 0
3 -ge 3: 0
lic$ba (lt lic$ba2 sprawdza czy #icz.a S !est mnie!sza ni% #icz.a2.
#!/bin/bash
a=3
b=2
test $a -lt $b
echo "$a -lt $b: $?"
test $b -lt $a
echo "$b -lt $a: $?"
wyni0
3 -lt 2: 1
2 -lt 3: 0
lic$ba (le lic$ba2 sprawdza czy #icz.a S !est mnie!sza #u. r(wna ni%
#icz.a2.
?@A.inA.as-
a=3
b=2
c=3
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SPQ
test $a -le $b
echo "$a -le $b: $?"
test $a -le $c
echo "$a -le $c: $?"
wyni testu0
3 -le 2: 1
3 -le 3: 0
#wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b #wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b
< < c$=.> III c$=.> III
5apisz srypt .as-$ t(ry sprawdza czy #icz.a KSQM !est wi*sza od #icz.y
KSSM.
<o%na r(wnie% por(wnywa& #icz.y zmiennoprzecinowe.
Sadnia !est inna ni% typowa sadnia powoi0
wyra%enieS BB wyra%enie2
3zy wyra%enieS !est taie samo !a wyra%enie2Y
wyra%enieS @B wyra%enie2
3zy wyra%enieS !est r(%ne od wyra%enie2Y
2yra%enieS [ wyra%enie2
3zy wyra%enieS !est wi*sze od wyra%enie2Y
wyra%enieS [B wyra%enie2
3zy wyra%enieS !est wi*sze #u. r(wne od wyra%enie2Y
wyra%enieS \ wyra%enie2
3zy wyra%enieS !est mnie!sze od wyra%enie2Y
wyra%enieS \B wyra%enie2
3zy wyra%enieS !est mnie!sze #u. r(wne wyra%enie2Y
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SPW
2szystie te operatory poazano w poni%szym srypcie0
#!/bin/bash
a=3.7
b=$(echo "$a == 3.7" | bc)
echo "$a == 3.7: $b"
b=$(echo "$a != 3.7" | bc)
echo "$a != 3.7: $b"
b=$(echo "$a > 3.7" | bc)
echo "$a > 3.7: $b"

b=$(echo "$a >= 3.7" | bc)
echo "$a >= 3.7: $b"
b=$(echo "$a < 3.7" | bc)
echo "$a < 3.7: $b"

b=$(echo "$a <= 3.7" | bc)
echo "$a <= 3.7: $b"
2ynii sryptu0
3.7 == 3.7: 1
3.7 != 3.7: 0
3.7 > 3.7: 0
3.7 >= 3.7: 1
3.7 < 3.7: 0
3.7 <= 3.7: 1
2yni po#ecenia bc w przypadu testowania wyra%eJ
zmiennoprzecinowyc- ma inn+ warto1& #o"iczn+ ni% w .as-0 KPM oznacza
=asz$ a KSM to prawda.
#wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b #wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b
< < c$=.> IA c$=.> IA
5apisz srypt .as-$ t(ry sprawdza czy #icz.a KSQ$6M !est wi*sza od
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SP6
#icz.y K22M.
3zasem wyst*pu!e onieczno1& om.inac!i i#u por(wnaJ ,test(w/$ na
przyad .y sprawdzi& czy warto1& !edne! zmienne! !est wi*sza od !edne!
#icz.y$ a mnie!sza od inne!.
S+ dwie mo%#iwo1ci taic- om.inac!i0
Blternatywa logic$na C+D 3&E4.
:estS zwraca KPM ,prawda/ #u. :est2 zwraca KPM ,prawda/
:estS
PT42H
4
]4^S)
:est2 PT42H
4
PT42H4 PT42H4
]4^S) PT42H4 ]4^S)
U%y! parametru (o .y utworzy& po+czenie LU> mi*dzy dwoma testami0
#!/bin/bash
a=/var
b=/etc/profile
test -f $a -o -f $b
echo "Result: $?"
,y-a.nienie. Srypt sprawdza$ czy p#i A'ar LU> AetcApro=i#e !est norma#nym
p#iiem. H#a A'ar wyni !est #o"icznym =aszem$ .o A'ar !est ata#o"iem. 4#e
AetcApro=i#e !est p#iiem. 2i*c wyni a#ternatywy !est KPM czy#i PT42H4.
Iloc$yn logic$ny I 3BNF4.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SPU
:estS zwraca KPM ,prawda/ #u. :est2 zwraca KPM ,prawda/
:estS
PT42H
4
]4^S)
:est2 PT42H
4
PT42H4 ]4^S)
]4^S) ]4^S) ]4^S)
U%y! parametru (a .y utworzy& po+czenie I ,45H/ mi*dzy dwoma testami0
#!/bin/bash
a=7
b=2
test $a -gt $b -a $(expr $a % 2) -eq 0
echo "Result: $?"
2y!a1nienie. Srypt sprawdza czy warto1& 9a !est wi*sza ni% warto1& 9. ,7[2$
prawda/ I czy 9a !est parzysta ,=asz/. Poniewa% dru"a cz*1& i#oczynu #o"iczne"o
!est =aszywa - test zwraca warto1& #o"iczn+ ]4^S).
logic$na NGHBIJB 3N&%4. 5e"ac!* reprezentu!e zna K ?1.
#!/bin/bash
a=7
b=2
test ! $a -gt $b
echo "Result: $?"
2y!a1nienie. 2yra%enie 2a (gt 2b sprawdza$ czy warto1& 9a !est wi*sza ni%
warto1& 9.. 2 powy%szym przyadzie !est to prawda. )na ne"ac!i powodu!e
zmian* wyniu na ]4^S).
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SP7
#wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b #wic$enie. Por7wnywanie pli"7w8 'a9cuch7w8 lic$b
< < c$=.> A c$=.> A
5apisz srypt .as-$ t(ry sprawdza czy #icz.a KSQ$6M !est wi*sza od
#icz.y K22M #u. mnie!szy ni% KS6M
2.5.K I$ytanie $ ,e-.cia 2.5.K I$ytanie $ ,e-.cia
5ie ma wi*sze"o sensu pisanie o1miowierszowe"o pro"ramu .as- ce#em
por(wnania dw(c- #icz.. 5o i pisanie "o na nowo$ d#a a%dyc- innyc- #icz....
2y"odnie! poprosi& u%ytownia o wprowadzenie danyc- warto1ci zmiennyc-X
natomiast srypt wyona na nic- zde=iniowane operac!e.
Po#ecenia read u%y!emy do czytania wprowadzanyc- danyc-. Pro"ram ten
czea$ a% u%ytowni zaoJczy wprowadzanie danyc- naci1ni*ciem #awisza
Gnter. <o%na poda& po#eceniu zmienn+$ t(ra ma przec-owywa& wprowadzane
in=ormac!e.
#!/bin/bash
read a
echo "You entered: $aA"
2y!a1nienie. Uruc-omiony po#eceniem read pro"ram czea na wprowadzenie
danyc- - we!1cie ,input/. 2prowadzone dane .*d+ pami*tane w zmienne! 9a. Po
zaoJczeniu wprowadzania naci1ni*ciem #awisza Enter$ wprowadzone dane
zostan+ wy1wiet#one na eranie ,po#ecenie ec-o/.
2 po#eceniu read mo%na poda& wi*ce! zmiennyc-. Fddzie#a si* !e spac!ami$
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
2 bc i#oczyn #o"iczny 45H zapisu!e si* przez KLLM$
a#ternatyw* FT w postaci K00M. ) o#ei ne"ac!* 5F: ore1#a
r(wnie% zna K?M.
8e%e#i w po#eceniu read nie podamy zmienne!$
w t(re! ma .y& przec-owane K2e!1cieM$ !est one
zapami*tane w zmienne! 2EGPCM.
Podstawy open source system SUSE Linux cz. II 2-SP8
a dane nazywa =ra"mentami - KtoenamiM. Pierwszy KtoenM !est
przec-owywany w pierwsze! zmienne!$ dru"i w dru"ie!$ i ta da#e!
odpowiednio.
#!/bin/bash
read a b c
echo "First token: $a"
echo "Second token: $b"
echo "Third token: $c"
Pozostay test tra=ia do ostatnie! zmienne!. Przyadowo !e%e#i wprowadzimy
z onso#i test K :-is is a s-ort textM$ e=etem .*dzie$ co nast*pu!e0
First token: This
Second token: is
Third token: a short text.
8e%e#i !est wi*ce! zmiennyc- ni% toen(w testowyc- pozostae zmienne s+
puste.
#wic$enie. I$ytanie $ ,e-.cia #wic$enie. I$ytanie $ ,e-.cia
5apisz srypt .as-$ t(ry czyta dwie caowite #icz.y z 2e!1cia i sprawdza
czy pierwsza !est wi*sza od dru"ie!.
2.5.5 2.5.5Nprawd$anie pr$ypad"7w Nprawd$anie pr$ypad"7w
.as- umo%#iwia dwa sposo.y ontro#i wyonywania pro"ram(w0
i;... ;i 8
case...esac.
8e%e#i c-cemy rozr(%ni& mi*dzy dwoma przypadami$ u%y!emy pierwsze!
mo%#iwo1ci.
5a!pro1cie! zro.i& to u%ywa!+c nast*pu!+ce! sadni0
i= po#eceniaX t-en
po#ecenia
=i
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SPG
2 pierwsze! o#e!no1ci sprawdzane !est po#ecenie po Ki=M. 8e%e#i wyni !est KPM
,prawda/$ wyonywane s+ po#ecenia po Kt-enM. 8e%e#i wyniiem po#ecenia po
Ki=M !est KSM ,=asz/$ nic si* nie dzie!e i ontynuowany !est pro"ram po etyiecie
K=iM.
2 wi*szo1ci przypad(w$ po#ecenia po Ki=M sprawdzane s+ po#eceniem test.
1
2
3
4
5
6
7
8
#!/bin/bash
echo "Enter something:"
read a
if test -e $a; then
echo "$a is an existing file."
fi
,y-a.nienie. Pro"ram prosi u%ytownia o wprowadzenie cze"oo#wie z onso#i
,wiersze Q-W/. nast*pnie sprawdza$ czy wprowadzony aJcuc- zna(w !est
istnie!+cym p#iiem ,wiersz U/. 8e%e#i ta$ odpowiedni omuniat !est wy1wiet#any
na eranie ,wiersz 7/.
<o%na doda& wyra%enie Ke#seM$ .y otrzyma&0
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SSP
i= po#eceniaX t-en
po#ecenia
e#se
po#ecenia
=i
Po#ecenia po Ke#seM s+ wyonywane$ "dy wyni Ki=M !est =aszem.
#!/bin/bash
echo "Enter something:"
read a
if test -e $a; then
echo "$a is an existing file."
else
echo "$a is no file."
fi
2y!a1nienie. Poprzedni srypt !est rozszerzony o dwa oJcowe wiersze ,e#se.../.
2 tym przypadu$ !e%e#i wprowadzone dane nie s+ nazw+ istnie!+ce"o p#iu$ na
eranie !est wy1wiet#any inny omuniat.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SSS
8e%e#i c-cemy sprawdzi& wi*ce! ni% !eden warune u%y!emy Ke#i=M mi*dzy
po#eceniem Kt-enM a Ke#seM0
i= commandsX t-en
commands
e#i= commandsX t-en
commands
e#se commands
commands
=i
2 pierwsze! o#e!no1ci wyonywane s+ po#ecenia po Ki=M. 8e%e#i ic- wyniiem
!est KPM ,prawda/ to wyonywane s+ po#ecenia po Kt-enM$ a !e%e#i wyni Ki=M to
KSM ,=asz/ wyonywane s+ po#ecenia po Ke#i=M. 8e%e#i ani wyni po#eceJ po Ki=M
ani wyni po#eceJ po Ke#i=M nie !est prawd+ wyonywane s+ po#ecenia po
Ke#seM.
<o%na u%ywa& wi*ce! ni% !eden warune Ke#i=M .udu!+c du"ie aJcuc-y
warun(w #o"icznyc-.
#!/bin/bash
echo "Enter something:"
read a
if test -e $a; then
echo "$a is an existing file."
elif test $a == geeko; then
echo "Entered geeko."
else
echo "$a is no file and not geeko."
=i
2y!a1nienie. Poprzedni pro"ram zosta rozszerzony o warune Ke#i=M. 2 tym
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SS2
przypadu wprowadzony ci+" !est sprawdzany na z"odno1& z K"eeoM
w przypadu$ "dy nie !est nazw+ istnie!+ce"o p#iu.
#wic$enie. Nprawd$anie warun"7w < c$=.> I #wic$enie. Nprawd$anie warun"7w < c$=.> I
5apisz srypt .as-$ t(ry czyta dwie caowite #icz.y z we!1cia
i sprawdza...
S.Z czy pierwsza #icz.a !est wi*sza od dru"ie!$
2.Z czy pierwsza #icz.a !est r(wna dru"ie!$
Q.Z pierwsza #icz.a !est mnie!sza od dru"ie!
2 a%dym z powy%szyc- przypad(w powinien .y&
wy1wiet#any inny$ wa1ciwy d#a dane"o przypadu$ omuniat.
8e%e#i c-cemy ore1#i& du%o r(%nyc- warun(w$ #epie! u%y& wyra%enia KcaseM
o sadni0
case warunek in
pattern | pattern...)
polecenia
;;
pattern | pattern...)
polecenia
;;
esac
2aruni s+ sprawdzane pod +tem dopasowania do wzorc(w ,pattern/. 8e%e#i
pasu!+ do dane"o wzorca$ !e"o po#ecenia s+ wyonywane$ !e%e#i nie
sprawdzany !est nast*pny wzorzec.
#!/bin/bash
echo "Enter something:"
read a
case $a in
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SSQ
[Yy]es|[Tt]rue)
echo "You entered Yes/True."
;;
[Nn]o|[Ff]alse)
echo "You entered No/False."
;;
esac
2y!a1nienie. 2prowadzany aJcuc- zna(w !est sprawdzany na z"odno1& ze sowami
K_esM #u. Kyes #u. K:rueM #u. KtrueM. 8e%e#i nie !est z"odny sprawdzany !est na z"odno1&
ze sowami K5oM #u. KnoM #u. K]a#seM #u. K=a#seM.
8e%e#i dany wzorzec pasu!e i !e"o po#ecenia s+ wyonane$ pro"ram wyc-odzi
z zaresu o"raniczone"o sowami KcaseM-MesacM i ontynuowane !est
wyonywanie pro"ramu po KesacM.
8e%e#i c-cemy .y zostay wyonane !aie1 po#ecenia w przypadu$ "dy %aden
z ore1#onyc- wzorc(w warun(wyc- KcaseM nie zac-odzi$ na#e%y doda&
wzorzec oznaczony "wiazd+ ,KNM/.
#!/bin/bash
echo "Enter something:"
read a
case $a in
[Yy]es|[Tt]rue)
echo "You entered Yes/True."
;;
[Nn]o|[Ff]alse)
echo "You entered No/False."
;;
*)
echo "Wrong input."
esac
#wic$enie. Nprawd$anie warun"7w < c$=.> II #wic$enie. Nprawd$anie warun"7w < c$=.> II
5apisz srypt .as-$ t(ry czyta !edn+ !ednocy=row+ #icz.* caowit+ z we!1cia
oraz wy1wiet#a #icz.* sownie na eranie ,na przyad0 K8edenM d#a KSM/.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SSW
2.5.O 2.5.O Ntosowanie p=tli Ntosowanie p=tli
Stosu!+c p*t#e powodu!emy i#arotne wyonanie cz*1ci pro"ramu.
Srypt .as- rozpozna!e trzy typy p*t#i0
while
until
;or
P=tla P=tla while while
Sadnia p*t#i0
while warunek; do
polecenia
done
)wy#e warune !est testem - po#ecenia wewn+trz p*t#i s+ wyonywane dop(i
warune !est prawdziwy.
#!/bin/bash
a=1
while test $a -le 8; do
echo "\$a=$a"
a=$(expr $a + 1)
done
2y!a1nienie. )mienne! KaM nadano warto1& KSM. 5ast*pnie sprawdzane !est czy
9a !est mnie!sza ,#u. r(wna/ od K8M. 8e%e#i warto1& 9a !est mnie!sza od K8M
- po#ecenia wewn+trz p*t#i s+ wyonywane0 wy1wiet#ana !est in=ormac!a
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SS6
o warto1ci zmienne!$ a nast*pnie warto1& zmienne! 9a !est zwi*szana o S.
2y!1ciem pro"ramu !est ci+"0
$a=1
$a=2
$a=3
$a=4
$a=5
$a=6
$a=7
9aB8
#wic$enie. Ntosowanie p=tli < c$=.> I #wic$enie. Ntosowanie p=tli < c$=.> I
5apisz srypt .as-$ t(ry czyta !edn+ !ednocy=row+ #icz.* caowit+ z we!1cia
oraz z#icza od !edne"o do wprowadzone! #icz.y. 5a eranie powinna .y&
wy1wiet#ana nazwa #icz.y$ nie cy=ra ,na przyad0 K8edenM d#a KSM/. U%y! p*t#i
while.
P=tla until P=tla until
P*t#a unti# !est podo.na do p*t#i w-i#e$ ma te% podo.n+ sadni*0
until warunek; do
polecenia
done
T(%nica mi*dzy while a until po#e"a na tym$ %e przy u%yciu until po#ecenia s+
wyonywane p(i warune !est prawd+.
>y uzysa& tai sam wyni$ !a w ostatnim przyadzie$ trze.a .y napisa&0
#!/bin/bash
a=1
until test $a -gt 8; do
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SSU
echo "\$a=$a"
a=$(expr $a + 1)
done
2y!a1nienie. while zast+piono przez until$ K-#eM zast+piono przez K-"tM.
#wic$enie. Ntosowanie p=tli < c$=.> II #wic$enie. Ntosowanie p=tli < c$=.> II
5apisz srypt .as-$ t(ry czyta !edn+ !ednocy=row+ #icz.* caowit+ z we!1cia
oraz z#icza od !edne"o do wprowadzone! #icz.y. 5a eranie powinna .y&
wy1wiet#ana nazwa #icz.y$ nie cy=ra ,na przyad0 K8edenM d#a KSM/. U%y! p*t#i
until.
P=tla ;or P=tla ;or
P*t#a ;or r(%ni si* od while i until. 8est stosowana do i#arotne"o
powt(rzenia =ra"mentu odu. I#o1& powt(rzeJ !est staa i ore1#ona z "(ry.
P*t#a ;or mo%e .y& u%ywana na dwa r(%ne sposo.y. 5a!prostsza sadnia to0
for zmienna in lista; do
polecenia
done
2arto1& zmienne! !est ustawiana na warto1& pierwsze! pozyc!i z #isty
i wyonywane s+ po#ecenia w p*t#i. 5ast*pnie zmienna !est ustawiana na
warto1& dru"ie! pozyc!i z #isty i ponownie wyonywane s+ po#ecenia w p*t#i.
2yonywanie p*t#i oJczy si* po wyczerpaniu #isty.
#!/bin/bash
for a in Geeko Suzie 100 0 Novell; do
echo "$a"
done
2y!1cie pro"ramu0
Geeko
Suzie
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SS7
100
0
Novell
Lista mo%e .y& tworzona w czasie wyonywania pro"ramu0
#!/bin/bash
for a in $(ls /bin/b*); do
echo "$a"
done
2y!a1nienie. 8ao #ista u%yte zostan+ wszystie p#ii z ata#o"u A.in zaczyna!+ce
si* od #itery K.M.
2y!1cie z pro"ramu0
/bin/basename
/bin/bash
/bin/bluepincat
Inna sadnia p*t#i ;or0
=or ,,zmiennaX waruneX zmiana//X do
po#ecenia
done
zmienna0 pocz+towa warto1& zmienne!$
warune0 p*t#a wyonywana !est ta du"o$ dop(i warune !est
prawdziwy$
zmiana0 na oniec p*t#i$ warto1& zmienne! !est zmieniana w spos(.
tu ore1#ony.
Przyad0
#!/bin/bash
for ((a=10; a<=15; a++)); do
echo "$a"
done
2y!a1nienie. Cdy pierwszy raz !est p*t#a wyonywana warto1& zmienne!
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-SS8
ustawiona !est na KSPM. 2arune testu!e$ czy warto1& zmienne! !est mnie!sza #u.
r(wna od KS6M$ nast*pnie wy1wiet#ana !est !e! warto1&. Po wyonaniu po#ecenia -
warto1& zmienne! zwi*szana !est o KSM i ponownie sprawdzany warune.
2y!1cie pro"ramu0
10
11
12
13
14
15
#wic$enie. Ntosowanie p=tli < c$=.> III #wic$enie. Ntosowanie p=tli < c$=.> III
5apisz srypt .as-$ t(ry czyta !edn+ !ednocy=row+ #icz.* caowit+ z we!1cia
oraz z#icza od !edne"o do wprowadzone! #icz.y. 5a eranie powinna .y&
wy1wiet#ana nazwa #icz.y$ nie cy=ra ,na przyad0 K8edenM d#a KSM/. U%y! p*t#i
;or.
Pr$erwanie p=tli Pr$erwanie p=tli
2 specy=icznyc- warunac- mo%na wy!1& z p*t#i zanim zostanie zaoJczona.
>y to zro.i&$ na#e%y u%y& po#ecenia brea".
#!/bin/bash
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
5ie !est onieczne u%ywane te! same! zmienne! we
wszystic- cz*1ciac- po#ecenia ;or.
8e%e#i do+czymy podw(!ny zna Kp#usM ,KLLM/ do zmienne! KaM
w po#eceniu ;or$ warto1& zmienne! zwi*szana .*dzie o KSM
w a%dym o.ie"u p*t#i.
8e%e#i do+czymy podw(!ny minus ,K--M/ - warto1& zmienne! .*dzie
zmnie!szana o KSM.
Podstawy open source system SUSE Linux cz. II 2-SSG
a=1
while true; do
echo "$a"
a=$(expr $a + 1)
if test $a == 8; then
break
fi
done
2y!a1nienie. )mienna 9a !est ustawiana na KSM. 2arune w-i#e zawsze zwraca
warto1& KprawdaM i p*t#a mo"a.y wyonywa& si* w niesoJczono1&$ "dy.y nie
po#ecenie .rea$ t(re !+ przerywa "dy warto1& zmienne! osi+"nie K8M.
2y!1cie pro"ramu0
1
2
3
4
5
6
7
2.5.P Ntosowanie opc-i i parametr7w polece9 w programach 2.5.P Ntosowanie opc-i i parametr7w polece9 w programach
8a !u% opisywa#i1my w poprzednic- rozdziaac-$ a%de po#ecenie ma zwy#e
wie#e r(%nyc- opc!i i parametr(w. <o%na ic- u%ywa& r(wnie% w pro"ramac-.
Licz.a u%ytyc- opc!i zapami*tywana !est w zmienne! K9?M.
#!/bin/bash
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-S2P
echo "$# options passed."
Spr(.u!my uruc-omi& r(ti pro"ram z paroma parametrami0
geeko@da51:~> ./script.sh geeko suzie 100 Novell
4 options passed.
Po#ecenie u%yte do uruc-omienia pro"ramu !est zapami*tywane w zmienne!
K9PM$ pierwszy parametr w zmienne! K9SM$ dru"i w zmienne! K92M i ta da#e!.
#!/bin/bash
echo "\$0=$0"
echo "\$1=$1"
echo "\$2=$2"
echo "\$3=$3"
Cdy uruc-amiamy pro"ram z i#oma parametrami$ wy!1cie$ przyadowo$
mo%e wy"#+da& nast*pu!+co0
geeko@da51:~> ./script.sh geeko suzie 100 Novell
$0=./script.sh
$1=geeko
$2=suzie
$3=100
:a metoda nie !est z.yt wy"odna$ poniewa% musimy zna& #icz.* parametr(w.
2 powy%szym przyadzie parametr K5o'e##M nie !est uwz"#*dniony$ poniewa%
pro"ram oczeu!e ty#o trzec- parametr(w.
2 ten spos(. mo%na uruc-omi& po#ecenie z dziewi*cioma opc!ami.
Poni%sza wers!a !est stosowana o wie#e cz*1cie!0
Sprawd` pierwsz+ opc!*. 5ast*pnie$ usuJ pierwszy e#ement #isty i dru"i stanie
si* pierwszym.
2yonu!e to po#ecenie shi;t.
)wy#e$ wyonu!e si* to po#eceniami p*t#i.
Prosty przyad0
#!/bin/bash
while test $# -gt 0; do
echo "Option: $1"
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-S2S
shift
done
2y!a1nienie. Po#ecenie test sprawdza czy #ista opc!i ma !eszcze !aie1 e#ementy.
8e%e#i ta$ pierwszy e#ement !est wy1wiet#any na eranie i usuwany z #isty. P*t#a
!est powtarzana p(i wszystie e#ementy nie zostan+ usuni*te z #isty.
2y!1cie z powy%sze"o pro"ramu0
geeko@da51:~> ./script.sh geeko suzie 100 Novell
Option: geeko
Option: suzie
Option: 100
Option: Novell
)wy#e pro"ram u%ywany do sprawdzania opc!i i parametr(w wy"#+da !a
poni%e!0
#!/bin/bash
while test $# -gt 0; do
case $1 in
-a) echo "Option a"
shift
;;
-b) echo "Option b"
shift
;;
-f) echo "Option f with argument $2"
shift 2
;;
*) echo "Wrong option: $1"
break
;;
esac
done
Poni%e! zamieszczono i#a przyad(w test(w0
1.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
>y usun+& wi*ce! ni% !eden e#ement z #isty$
na#e%y u%y& po#ecenia shi;t lic$ba$ "dzie #icz.a
ore1#a i#o1& e#ement(w.
Podstawy open source system SUSE Linux cz. II 2-S22
geeko@da51:~> ./script.sh -a -f /home/geeko
Option a
Option f with argument /home/geeko
2.
geeko@da51:~> ./script.sh -f /home/geeko -a
Option f with argument /home/geeko
Option a
3.
geeko@da51:~> ./script.sh -b /home/geeko
Option b
Wrong option: /home/geeko
4.
geeko@da51:~> ./script.sh /home/geeko -f
Wrong option: /home/geeko
#wic$enie. +Qywanie opc-i i parametr7w w programach #wic$enie. +Qywanie opc-i i parametr7w w programach
Fpisz$ co si* dzie!e w a%dym z powy%szyc- czterec- przyad(w test(w.
S.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
2.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Q.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
W.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-S2Q
2.5.8 2.5.8 %wor$enie ;un"c-i pow'o"i %wor$enie ;un"c-i pow'o"i
]unc!e to wa1ciwie "otowe podpro"ramy moduy$ t(re mo%na umieszcza&
w r(%nyc- mie!scac- pro"ramu czy pro"ram(w. Teprezentu!+ cz*sto
wyst*pu!+ce$ powtarza!+ce si* e#ementy r(%nyc- pro"ram(w. 7od pro"ramu
=unc!i !est wyodr*.niony z pro"ramu podstawowe"o. ]unc!a mo%e .y&
wywoywana z "(wne"o pro"ramu w dowo#nym momencie$ w razie potrze.y.
Sadnia =unc!i0 name ,/ a po#ecenia b
]unc!a wywoywana !est z "(wne"o pro"ramu przez swo!+ nazw*. <o%na te%
doda& i#a parametr(w.
Przyad0
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
sum() {
a=$(expr $1 + $2)
echo "$1+$2="$a
}
sum 4 5
sum 2 9
sum 12 1
sum 204 2387
sum 5 3
sum 21 39
,y-a.nienie. C(wny pro"ram zaczyna si* w wierszu 8. 2ywou!e on =unc!*
KsumM sze1ciorotnie$ z r(%nymi parametrami. ]unc!a ,wiersze Q-U/ doda!e
podane parametry i wyni wy1wiet#a na eranie. Parametry ore1#a!+ zmienne
K9SM orazM92M.
2y!1cie pro"amu wy"#+da nast*pu!+co0
4+5=9
2+9=11
12+1=13
204+2387=2591
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Fdwoania do parametr(w =unc!i rea#izowne s+ w
ten sam spos(.$ !a om(wione wcze1nie!
odwoania do parametr(w pro"ramu.
Podstawy open source system SUSE Linux cz. II 2-S2W
5+3=8
21+39=60
Parametry pozwa#a!+ przeazanie in=ormac!i do =unc!i. Ho przeazania
in=ormac!i z =unc!i do "(wne"o pro"ramu u%y& mo%na po#ecenia return
z odpowiednim numerem.
Przyad0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
validate() {
if [ $1 = yes ]; then
return 1
else
return 0
fi
}
a=1
while true; do
echo $a" -> To continue, enter \"yes\""
read b
if validate $b; then
break
fi
a=$(expr $a + 1)
done
echo "Stop!"
,y-a.nienie. C(wny pro"ram zaczyna si* w wierszu SS. )awiera
niesoJczon+ p*t#* ,wiersze S2-SG/ i prosi u%ytownia o wprowadzenie
danyc- ,wiersz SW/. P*t#a !est oJczona ,przerywana wiersz SU/ wtedy$
"dy warto1& zwracana =unc!+ validate ,/ !est KprawdaM ,t!. KPM/.
]unc!a po.iera dane od u%ytownia !ao warto1& parametru po#ecenia.
8e%e#i u%ytowni wprowadzi KyesM$ =unc!a zwraca warto1& MSM$ we
wszystic- innyc- przypadac- zwraca warto1& KPM.
8e%e#i wprowadzimy KyesM cztery razy$ wy!1cie pro"ramu .*dzie miao posta&0
1 -> To continue, enter "yes"
yes
2 -> To continue, enter "yes"
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
Podstawy open source system SUSE Linux cz. II 2-S26
yes
3 -> To continue, enter "yes"
yes
4 -> To continue, enter "yes"
no
Stop!
Homy1#nie$ warto1& zmienne! o.owi+zu!e w caym pro"ramie$ :a+ zmienn+
nazywamy $miennR globalnR. <o%#iwe !est !edna tworzenie zmiennyc-
wy+cznie d#a dane! =unc!i. :en typ zmienne! nazywamy $miennR lo"alnR
i tworzymy po#eceniem local.
Przyad0
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
localvar() {
local a=1
echo "function:" $a
}
a=0
echo "main before:" $a
localvar
echo "main after:" $a
,y-a.nienie. C(wny pro"ram zaczyna si* w wierszu 8. )mienna K9aM !est
tworzona i nadawana !est !e! warto1& MPM. 2 wierszu SP =unc!a !est nazywana.
2 te! =unc!i !est de=iniowana #oa#na zmienna$ r(wnie% o nazwie KaM ,wiersz W/.
2y!1cie pro"ramu0
main before: 0
function: 1
main after: 0
8e%e#i zmienna #oa#na ma ta+ sam+ nazw* !a zmienna "#o.a#na$ zmienna
"#o.a#na !est KnadpisywanaM #oa#n+ wewn+trz =unc!i. Po wyonaniu =unc!i
!est przywracana ory"ina#n+ warto1& zmienne! "#o.a#ne!.
2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.
2yda!e si* atwie!szym u%ywanie zmiennyc- "#o.a#nyc-.
8edna w du%yc-$ somp#iowanyc- pro"ramac- mo%e to
powodowa& on=#ity$ trudno zapanowa& nad setami
zmiennyc-. 2i*c #epie! !est de#arowa& zmienne ty#o wtedy$
"dy s+ potrze.ne. 8est to cec-+ do.re"o pro"ramowania.
Podstawy open source system SUSE Linux cz. II 2-S2U
#wic$enie. %wor$enie ;un"c-i #wic$enie. %wor$enie ;un"c-i
5apisz srypt .as-$ t(ry czyta #icz.y z we!1cia i o.#icza 1redni+ arytmetyczn+
wprowadzonyc- #icz.. Pro"ram powinien si* zaoJczy&$ "dy zamiast #icz.y
wprowadzisz sowo KoniecM. U%y! przyna!mnie! !edne! =unc!i do sprawdzenia$
czy wprowadzone dane to #icz.a czy sowo KoniecM.
Podstawowe $asady dobrego programowania Podstawowe $asady dobrego programowania
U%ywa! omentarzy w swoic- pro"ramac-.
U%ywa! wci*& w =ormatowaniu d#a wi*sze! czyte#no1ci two!e"o
pro"ramu.
U%ywa! Ksamowy!a1nia!+cyc- si*M nazw d#a =unc!i i zmiennyc-.
H#a stayc- ,nie zmienia!+ swoic- warto1ci w czasie prze.ie"u
pro"ramu/$ u%ywa! du%yc- #iter.
8e%e#i potrze.u!esz zmiennyc- d#a p*t#i z#icza!+cyc- ,np. d#a =or/ u%y!
9i$ 9! #u. 9.
8e%e#i potrze.u!esz zmienne! na r(to ,np. d#a .u=orowania
warto1ci/$ u%y! 9a$ 9.$ 9c d#a #icz. caowityc-
oraz 9x$ 9y$ 9z d#a #icz. zmiennoprzecinowyc-.

2008 Novell Inc. Licenc!a 3reati'e 3ommons 4ttri.ution-5on3ommercia#-S-are4#ie 2.6. 2o#no opiowa&$ rozprowadza&$ przedstawia&
i wyonywa& utw(r oraz opracowane na !e"o podstawie utwory za#e%ne !edynie d#a ce#(w nieomercy!nyc-$ przy zac-owaniu autorstwa
5o'e## Inc.

You might also like