560 likes | 918 Views
SHELL. Mihhail Karutin Artur Assor. Sissejuhatus. UNIX. Operatsioonsüsteem UNIX loodi Ken Thompsoni ja Denis Ritchi poolt Bell Laborotories ’ i s (AT&T). Sissejuhatus: UNIX ’i kolm komponenti. Keel C Failisüsteem Käsukeel. Sissejuhatus: K äsu interpr e taatorkeel Shell.
E N D
SHELL Mihhail Karutin Artur Assor
UNIX Operatsioonsüsteem UNIX loodi Ken Thompsoni ja Denis Ritchi poolt Bell Laborotories’is (AT&T).
Sissejuhatus:UNIX’i kolm komponenti • Keel C • Failisüsteem • Käsukeel
Sissejuhatus:Käsu interpretaatorkeel Shell On tegelikult väga kõrgetasemeline programmeerimiskeel.
Sissejuhatus:Teised käsukeeled • B Shell (Bourne Shell) • C Shell • K Shell • Bashell = bash (Bourne-Again Shell) • ...
Sissejuhatus:SKRIPTID JA INTERPRETAATORID Käsu interpreteerijatäidab käsud otseselt, ilma esialgse kompileerimiseta. Interpreteerija töötleb käsud ja skriptid, mis kasutaja sisestab käsurea kaudu. Skript – on tekstifail, mille sisuks on ettevalmistatud käskude järjestus.
Klassikalised käsuinterpreteerijad • B Shell (Bourne Shell) - Stephen R. Bourne • C Shell - William N. Joy • C Shell ja B Shell ei sobi omavahel kokku
Bourne-Again SHell • Välja töötatud FSF`i poolt. • Kombineeritud B Shell’i süntaks ja C Shell’i võimsus
Shell’i südamikelement on käsk.Bash’is on rohkem kui sada sise- ja väliskäsku. Sissejuhatus:KÄSUD JA SÜMBOLID
Käsude struktuur • Käsu formaat <käsu nimi> <võtmed> <parameetrid> Näiteks: ls -lh /usr/bin • Esimesed sümbolid tühikuni (rea lõpuni) interpreteeritakse käsuna cat cat • Selline struktuur ei esine alati
Käskude gruppeerimine • Grupeerimise vahendid: • ; - jarjestatud käsu täitmine • & - asünkroonne käsu täitmine • && - käsu täitmine tingimusel, et eelmine käsk on täidetud • || - käsu täitmine tingimusel, et eelmine käsk ei ole täidetud
& - asünkroonne käsu täitmine # find / -name conf -print & [1] 2818 #pwd /root/temp #/etc/log.d/conf /etc/httpd/conf /usr/include/sys/conf • wait [PID] – tagaprotsessi lõpu ootamine
Käskude grupeerimine “{}” k1 && k2; k3 • {} k1 && {k2; k3} {k1; k2} &
Käskude grupeerimine “()” cd ..; ls; ls • () (cd ..; ls); ls
Protsesside kustutamine (tapmine) • Kustutamine ps -aux kill -9 [PID] • Protsessi omanik = kasutaja, kes seda protsessi tapab, või superkasutaja
Ümbersuunamine • “stdin” – sisestamine: voog klahviatuurist • “stdout” – väljastamine: voog ekraanile • “stderr” – vigadevoog
Ümbersuunamine (järg) • “>”(“<”) ja “>>” (“<<”) – voo ümbersuunamine ls >f1 pwd >>f1 • Filter – käsktöötab “stdin” -iga ja “stdout” -iga ps –aux | grep root >> f1
Fail = seade • /dev – seadme kataloog • “lp” – printimine ls > /dev/lp • “console” – konsool • “ttyN” – terminal N (N= 1, 2, ..) • “null” – tühi fail (seade) f1 < /dev/null sort f1 | tee /dev/lp | tail -20
Fail = seade (järg) • 0 - stdin • 1 - stdout • 2 - stderr
Ümbersuunamine (järg) • Vigadeta ümbersuunamine #cat f1 f2 Faili sisu cat: f2: No such file or directory • Vigadega ümbersuunamine cat f1 f2 2>f_err cat f1 f2 >>ff 2>ff cat f1 f2 2>>ff 1>&2
Failde nimed(generatsioon) • * - suvaliste sümbolite jada cat f* cat *f* • ? – üks suvaline sümbol cat program.? • […] – sulgudes iga sümbol cat [a-d]* cat [abcd]*
Käsufailid • sh execfile • chmod +x execfile .execfile
SHELL`i muutujad • $ - muutuja tähistamine #echo $var_2 OS UNIX #echo var_2 var_2 • Kui a=/root/ siis: ls /root/temp on sama mis ls ${a}temp
Ekraniseerimine • “ “ • ‘ ‘ • \
Ekraniseerimine (järg) # x=22 y=33 z=$x # A="$x" B='$x' C=\$x # D="$x+$y+$z" E='$x+$y+$z' # F=$x\ +\ $y\ +\ $z # echo A=$A B=$B C=$C A=22 B=$x C=$x # echo D=$D E=$E F=$F D=22+33+22 E=$x+$y+$z F=22+33+22
Muutujate tüüpid • Üldjuhul “string” tüüp • “expr” #x=7 y=2 #a=`expr $x + $y` ; echo a=$a a=9 #a=`expr $a + 1` ; echo a=$a a=10 #c=`expr $x '*' $y` ; echo c=$c a=14
“expr” (veel) #A=`expr'cocktail':'cock'`;echo $A 4 #B=`expr'cocktail':'tail'`;echo $B 0 #C=`expr'cocktail':'cook'`;echo $C 0 #D=`expr'cock':'cocktail'`;echo $D 0
Muutuja vahetamine tinglikult sh-2.05b# echo ${x-new} new sh-2.05b# echo ${y=new} new sh-2.05b# echo $y new sh-2.05b# echo ${z?new} sh: z: new sh-2.05b# echo ${y+new_1} new_1 sh-2.05b# echo $y new
Käsufaili parameetrid • Parameetrid on positsioonilised • Nende poole pöördumine: $N kus N=0, …,9 • $0 – käsufaili nimi • Kui parameetreid on rohkem kui 9, kasutatakse “shift” käsku • Mugav on “set” käsk
Käsufaili parameetrid (näide) • Käsufail “examp-1”: echo See on arvutamine $0: sort $2 >> $1 cat $1 • Failide “cock” ja “tail” “examp-1” parameetrid: cock: See on sorteeritud fail: tail: 4 1 3 2
Käsufaili parameetrid (näide) sh-2.05b# sh example-1 cock tail See on arvutamine example-1: See on sorteeritud fail: 1 2 3 4
Käsufaili parameetrid (shift) • Käsufail “many”: echo "$0: Palju parameetreid" echo " Parameetrite üldine arv = $# Algseisund: $1 $5 $9 " shift; echo "1 nihe: esimene=$1 viies=$5 üheksas=$9" shift 2; echo "1 + 2 = 3 nihed: esimene =$1 viies =$5 üheksas =$9" perem=`expr $1 + $2 + $3` echo $perem
Käsufaili parameetrid (shift) # sh many 10 20 30 40 50 60 70 80 90 100 110 120 130 many: Palju parameetreid Parameetrite uldine arv = 13 Algseisund: 10 50 90 1 nihe: esimene=20 viies=60 uheksas=100 1 + 2 = 3 nihed: esimene =40 viies =80 uheksas =120 150
Käsufaili parameetrid (set) sh-2.05b# date Thu May 26 00:02:48 EEST 2005 sh-2.05b# set `date` sh-2.05b# echo $2 $3 $6 May 26 2005
Shell-interpretaatori asendused • Enne täitmist: • Tulemuste asendused – tagurpidiste jutumärkides olevate käskude täitmine • Muutujate ja parameetrite väärtuste asendused – sõnad, mis algavad “$”-st, asendatakse vastavate muutujate ja parameetrite väärtusega • Tühikute asendamine – ignoreeritakse ekraneeritud tühikud • Failinimede genereerimine – spetsümbolite (“*”, “?”, “[]”) olemasolu kontroll sõnades ja vastava generatsiooni täitmine
Programmeerimiskeskkond • Iga protsess täidetakse keskkonnas • shell kasutab ka mõningaid keskkonnamuutujaid • Set – annab info standartsete muutujate kohta, mis on loodud sisselogimise ajal, ja muutujate kohta, mis eksporteeritakse kasutaja protsesside poolt
shell muutujad • shell omistab automaatselt väärtused järgmistele muutujatele (parameetritele) • ? – väärtus, mis tagastatakse viimase käsu poolt • $ - protsessi number • ! – tagaprotsess • # - shelli edastatud positsiooneeritud protsesside arv • * - parameetrite nimekiri, ühe sõnega esitatud • @ - parameetrite nimekiri, sõnade kombinatsioon • - - võtmed, mis antakse shell-ile • Nende muutujate poole pöördumisel tuleb ette sisestada “$”
Programmeerimisstruktuurid • Kommentaar • # See on kommentaar. • ## Ja see on ka kommentaar. • ### Ja see ka.
test (“[ ]”) • Kontrollib mingi tingimuse täitmist • Selle käsu abil saab vormindada valiku operaatorid ja tsüklid shell-is • 2 varianti: • test tingimus • [ tingimus ] • Näiteks: sh-2.05b# [ -f cock ]; echo $? 0 sh-2.05b# [ -d cock ]; echo $? 1
Täisarvude võrdlemise tingimused • x -eq y • “x” on võrdne “y” • x -ne y • “x” ei võrdu “y” • x -gt y • “x” on suurem kui “y” • x -ge y • “x” on suurem või võrdne “y” • x -lt y • “x” on väiksem kui “y” • x -le y • “x” on väiksem või võrdne “y”
Tingimusoperaator “if” • Üldine struktuur if tingimus then nimekiri [elif tingimus then nimekiri] [else nimekiri] fi
Valikuoperaator “case” • Üldine struktuur case sõne in shabloon) käskude nimekiri;; -abloon) käskude nimekiri;; … esac
Valikuoperaator “case” (järg) ### #"case“ struktuur. echo -n " Milline on sinu eksamitulemus?: " read z case $z in 5) echo Tubli ! ;; 4) echo Ikka tubli ! ;; 3) echo Rahuldav ! ;; 2|1) echo Halvasti ! ;; *) echo ! ;; esac
Tsüklioperaator “for” • Üldine struktuur for nimi [in väärtuste nimekiri] do käskude nimekiri done
Tsüklioperaator “while” • Üldine struktuur while tingimus do käskude nimekiri done
Tsüklioperaator “while” - näide ### # "while“ struktuur n=0 while [ $n -lt 50 ] do n=`expr $n + 1` cat file-22 > /dev/lp done
Tsüklioperaator “until” • Üldine struktuur until tingimus do käskude nimekiri done
Tsüklioperaator “until” - näide until false do read x if [ $x = 5 ] then echo enough ; break else echo “some more” fi done