280 likes | 528 Vues
Operatsioonisüsteemid. Allan Liblik. Käsuinterpretaator e. shell. programm, mis võtab vastu kasutaja käsud ja annab need OS’ile täitmiseks – interpreteerib käske; käsk, mis võimaldab kasutada teisi käske; iga käsk käivitab ühe või mitu programmi; käsud grupeeritult failis – shell script ;
E N D
Operatsioonisüsteemid Allan Liblik
Käsuinterpretaator e. shell • programm, mis võtab vastu kasutaja käsud ja annab need OS’ile täitmiseks – interpreteerib käske; • käsk, mis võimaldab kasutada teisi käske; • iga käsk käivitab ühe või mitu programmi; • käsud grupeeritult failis – shell script; • skripti käivitades täidetakse käsud kindlas järjekorras;
shellid • Unixis: The Bourne shell – sh, esimesi üldse;The C shell – csh, sarnasused C-ga; BSDThe Korn shell – ksh, AT&T, konkureerima csh’ga;Bash, the Bourne Again Shell – bash;the T C Shell – tcsh;ash (pisike korrastatud bash), zsh (interaktiivsus), rc (Bell, võrgu-home jms)
Shellid MS Windows’is • Cygwin – vaikimisi ash nimega sh; • Services for Unix – nudi ksh; • command.com • cmd
shelli valimine • bash – pidev areng, paljudes kohtades vaikimisi; • ksh; • kui midagi on selge, kasuta seda; • muuda käsuga chsh: chsh -s /bin/ksh (loe ka man’i) • shelli nimi on muutujaga SHELL kirjeldatud. • man <shellinimi>, man bash
Käsuvõtmed • vanad ainult -voti • uuemad (alates 1980ndad) ka --võti • Võtmete ühendamine: • uname -a -p = uname -ap • mõne käsu võtmetel ei ole “-” märke:dd if=/dev/rcd0c of=disk.iso bs=32k
Redigeerimine, asendus • Käsu redigeerimine – sh ainult “backspace” ja Ctrl-C, alates C shellist rohkem – üks olulisi shellide erinevusi; • käskude asendamine:!! - kordab eelmist käsku;!$ - eelmise käsu viimane osa;üles ja alla nooled - liikumine ajaloos;!-n - n’is eelviimane käsk, !! = !-1^string1^string2^ - str1 asendatakse 2ga;
Asendamine -bash-3.2$ du 9320 . -bash-3.2$ ^u^f^ df Filesystem 512-blocks Used Avail Capacity Mounted on /dev/wd0a 2061036 659316 1298672 34% / /dev/wd0h 107446600 35161472 66912800 34% /backup /dev/wd0g 6187580 5578652 299552 95% /tftpboot /dev/wd0f 4126444 136 3919988 0% /tmp /dev/wd0d 10319276 3304260 6499056 34% /usr /dev/wd0e 20637580 16042692 3563012 82% /var /dev/wd1a 230733064 71346404 147850008 33% /home /dev/wd2a 230733064 173027632 46168780 79% /data
failinimede lõpetamine tab , tab tab – ridade lõpetamine esc / (bash) – ridade lõpetamine esc \ (ksh) – ridade lõpetamine esc ? (bash) - võimalike nimede näitamine ctrl D (csh, tcsh) võimalike nimede näitamine esc = (ksh) - võimalike nimede näitamine
shelli skript tekstifail, mis sisaldab ühte või rohkemat käsku;
Teised skriptikeeled • Perl – Practical Extraction and Reporting Language; • Python • Tcl – Tool Command Language; • MS-DOS batch failid;
Redigeerimisvahendid • Minimaalselt vaja shelli ja tekstiredaktorit • redaktorid: vi, emacs, pico ja teised • Väljundi ümbersuunamine faili • Skripti kirjutamine – tekstifaili redigeerimine;
Esimene skript • koostage fail, nimega skript_1, milles on rida:echo 'Tere' $USER • käivitame faili: sh script1 • echo -n - echo ei pane real lõppu realõpu tunnust.
Teine skript kaht moodi • Väliselt teeb sama:echo –n 'Tere ' whoamiecho 'Tere' `whoami`
Muutujad • muutuja väärtustamine:muutuja_nimi=väärtus • muutuja väärtuse lugemine:$muutuja_nimi • C-shellis:set muutuja_nimi=väärtus$muutuja_nimi • Muutuja nimi algab tähega, sisaldab tähti, alakriipse numbreid
shelli viiba muutmine • muutujad PS1, PS2, PS3, PS4PS1="\u$ "PS1="\h$ "PS1="\u@\h$ " • PROMPTING bash'i manuaalis
käsud muutujates Tehke skript, nimeks skript3: kataloog=/bin kask=ls jutt="kataloogi sisuks on " echo $jutt $kask $kataloog • käivitage: sh skript3
Andmete lugemine käsk read echo -n "Eesnimi: "read eesnimiecho -n "perekonnanini: "read perekonnanimitaisnimi="$eesnimi $perekonnanimi"tekst="Tere kodanik "echo $tekst $taisnimi
Kommentaarid skriptis • kõik alates # kuni rea lõpuni loetakse kommetaariks;- mida skript teeb- mis tüüpi skript on (bash, perl, ...)- kuidas kasutada- mida mingi konstruktsioon teeb;- probleemsed kohad;- mida ja kuidas edasi laiendada ja arendada (TODO);
kommentaari naide # see on andmete lugemise naiteskript echo -n "Eesnimi: " read eesnimi #loeme eesnimeecho -n "perekonnanini: "read perekonnanimi #ja perenimetaisnimi="$eesnimi $perekonnanimi"tekst="Tere kodanik "echo $tekst $taisnimi #ja kuvame
Muutujate kasutamine 1/2 echo "Test1 =======" muutuja=abc echo $muutuja echo ${muutuja} echo {$muutuja} echo "Test2 =======" echo muutuja echo "muutuja" echo "$muutuja" echo "\$muutuja" echo "Test3 =======" echo $muutuja123 echo ${muutuja}123
Muutujate kasutamine 2/2 echo "Test4 =======" echo $muutuja$muutuja echo $muutuja123$muutuja echo ${muutuja}${muutuja} echo ${muutuja}123${muutuja} echo "Test5 =======" muutuja="a b c" echo $muutuja echo "$muutuja"
Tsüklid for muutuja in väärtuste_nimekiri do kask1 kask2 ... kask n done
tsükkel kindel arv kordi for i in 1 2 3 4 5 6 7 8 9 10 do echo -n "..$i.." sleep 1 done
Veel näide for i in * do echo $i done # ülesanne: loe üle kõigis failides olevad sõnad (wc), väljund kujul: Fail1, sonu 123 tk Fail2, sonu 34 tk
Suvalised väärtused for i in a 1 2 d 5 7 h 8 qqq do echo -n "..$i.." sleep 1 done
C-laadne tsükkel (töötab bash’is) max=10 for (( i=1 ; i <= max ; i++ )) do echo -n "..$i.." sleep 1 done echo
tsükkel tsüklis for i in 1 2 3 4 5 6 7 8 9 10 do for j in a b c d e f g h i j do echo -n "$i$j " done echo done echo