Ksh
Sissejuhatus
Kornshelli keel disainiti ja arendati David G. Korni poolt AT&T Bell laboris. See on interaktiivne käsukeel, mis võimaldab ligipääsu UNIXi süsteemi ja mitmesse muusse süsteemi, mitmetel erinevatel arvutitel ja töökohtadel kuhu see on rakendatud. Kornshelli keel on lisaks veel täielik, võimas, kõrge tasemega programeerimis keel, millega rakendusi kirjutada, tihti palju kergemini ja kiiremini kui teiste kõrge tasemeliste keeltega.See teeb selle eriti sobivaks prototüübide jaoks. On ka kaks teist laialdaselt kasutatud shelli, Borune Shell, mis on arendatud Steven Bourne samuti AT&T Bell laboris ja C shell, mis on arendatud Bill Joy poolt Kalifornia Ülikoolis. KSH’l on neist mõlemast paremad võimalused, lisaks mitmed tema enda lisa võimalused.Seega KSH saab teha palju, et suurendada sinu produktiivsust ja kvaliteeti töös, nii süsteemiga suhtlemises kui ka programeerimises. Ksh programme on lihtsam kirjutada ja nad on sisutihedamad ja loetavamad kui programmid mis on kirjutada madalama taseme keeles nagu näiteks C.
Kornshelli põhieelis üle teiste traditsiooniliste shell keelte on selle kasutus, kui programeerimiskeel. Selle loomisest saati on lisatud mitmeid lisasid, samas säilitades tugeva tagurpidi ühilduvuse Bourneshelliga.
Ksh93 versioon toetab assotsiatiivne massiive ja sisse ehitatud ujukoma aritmeetikat.
Kornshelli võimaluste kokkuvõte
Kornshell kõige arenenum shell versioon mida „ametlikult“ jagatakse UNIX süsteemis. Töö kontroll(Job Controll) koosneb fg ja bg käskudest ja võimalusest peatada töö CTRL-Z´ga
Aliases, mis lubab defineerida kiirkirja nimesid või käske ja käsuridasid
Funktsioonid(osades C shell versioonides ka), mis suurendab programeerimis võimalust ja võimaldab salvestada sinu shelli koodi mälus selle asemel, et failides
Käsu ajalugu(Command history) lubab sul esile kutsuda eelnevalt sisestatud käske
Käsurea muutmine(Command-line editing), mis lubab sul kasutada vi või emacs –stiili käsu muutmiseks käsureal
Integreeritud programeerimise võimalus(Integrated programming features), mitme välis UNIX käsu funktsionaalsus, mis sisaldab test, expr, getopt ja echo. On integreeritud shelli sisse, mis võimaldab tavapäraseid programeerimis tegevusi teha puhtalt ja ilma, et peaks eraldi protsesse tegema
Kontrolli struktuuri(Control structure) eriti „select“ konstruktsioon, mis võimaldab lihtsalt menüüd genereerida. Debugging primitiive(Debugging primitives), mis võimaldab kirjutada tööriistu, mis aitavad programeerijatel debug nende shelli koodi
Regulaarsed väljendid(Regular expressions)- hästi teada UNIXi utiliitide kasutajatele nagu näiteks grep ja awk on lisatud standart failinimede wildcardi kogudele ja shelli muutujate rajatistele
Arenenud I/O lisad(Advanced I/O features) sisaldab võimalust teha kahte-pidi kommunikatsiooni koos samaaegsete protsessidega
Uued võimalused ja muutujad, mis annab sulle rohkem võimalusi muuta enda keskkonda
Suurendatud kiirus- shelli koodi käivitamisel
Turva võimalused- Aitab kaitsa Trooja hobuste ja teiste pahade sisse tungimis skeemide
Algteadmised
Shelli tüübi defineerimine: Et teha ksh skript(mis on ksh program), loo uus fail, mis algab nii:
#!/usr/bin/ksh
Väga tähtis, et rada ksh´le on õige ja et real poleks rohkem, kui 32 märki.
Skripti algus ja lõpp:
Skript algab esimeselt realt ja lõppeb siis kui ta kohtab „exit´it“ või viimast rida, kõik # ignoreeritakse
Käsu algus ja lõpp:
Käsk algab esimesest sõnast real või kui see on teine käsk real siis esimene sõna peale „;“. Käsk lõppeb kas rea lõpus või „;“, nii et saab panna mitu käsku ühele reale.
print -n "Name: "; read name; print ""
Käske võib jätkata ka järgmiselt realt kasutades „\“ mille kohe järgneb uue rea sümbol, võib olla „return“ klahv:
grep filename | sort -u | awk '{print $4}' | \ uniq -c >> /longpath/file
IF
Põhiline tinglause on „if“
if [ $? -eq 0 ] ; then print we are okay else print something failed fi
Kui $? Muutuja on võrdne 0´ga, siis (THEN) prindi välja sõnum, muuljuhul (else), prindi välja teine sõnum. FYI, „$?“ kontrollib väljumise staatust viimasel jooksutatud käsul.
Viimane „fi“ on nõutud. See lubab sul grupeerida mitmeid asju kokku. Sa võid panna mitmeid asju ifi ja else vahele või else ja fi vahele või mõlema. Sa võid üldse else ära jätta. Kui ei vaja alternatiivi.
if [ $? -eq 0 ] ; then print we are okay print We can do as much as we like here fi
Case
Case väide funktsioneerib nagu muutus(switch) mõnes muus keeles. Andes kindel muutuja, hüppab kindlale koodiosale, mille määrab ära muutuja väärtus. Kuigi süntaks on sarnane C´ga väliselt on mõned suured erinevused.
- muutuja mida kontrollitakse võib olla string, mitte lihtsalt number
- Ei ole mingit läbi kukkumist „fall through“ ;;’ga, sa saad ainult ühe komplekti käske. Kui sa just ei kasuta „;&“ „;;“ asemel.
- et heastada seda et läbi kukkumist pole saad sa jagada muutuja seisundit.
- saad kasutada metamärki „wildcard“ et sobitada stringe
echo input yes or no read answer case $answer in yes|Yes|y) echo got a positive answer # the following ';;' is mandatory for every set # of comparative xxx) that you do ;; no) echo got a 'no' ;; q*|Q*) #assume the user wants to quit exit ;; *) echo This is the default clause. we are not sure why or echo what someone would be typing, but we could take echo action on it here ;; Esac
While
Põhiline sõlm on kui/samas(while) sõlm, „kui“ midagi on tõene jätka sõlme.
On kaks viisi kuidas sõlme peatada. Kõige loogilisem viis on nii, et kui midagi pole enam tõene. Teine viis on kasutada „break“ käsku.
keeplooping=1; while $keeplooping -eq 1 ; do read quitnow if "$quitnow" = "yes" ; then keeplooping=0 fi if "$quitnow" = "q" ; then break; fi done
Until
Teine sõlme tüüp ksh´s on „until“. Nende erinevus on see, et „while“ jätab sõlme käima seni kuni midagi jääb truuks. „until“ teeb sõlme seni kuni midagi mis on vale läheb tõeks.
until $stopnow -eq 1 ; do echo just run this once stopnow=1; echo we should not be here again. Done
For
„for“ loop on limiteeritud sõlm. See teeb sõlme kindla arv kordi, et vastata kindlale asjade hulgale. Kui sa kord alustad sõlme siis kordus on fikseeritud.
Kõige lihtsam süntaks on:
for var in one two three ; do echo $var done
Mis iganes nime sa paned „var“ asemele, uuendatakse iga väärtusega mis järgneb „in“´le. Nii et eelnev sõlm prindib välja:
one two three
Aga sa saad ka muutujad, mis määravad ära asjade nimekirja. Neid kontrollitakse ainult ühe korra, kui sa alustad sõlme:
list="one two three" for var in $list ; do echo $var # Note: Changing this does NOT affect the loop items list="nolist" done
Kaks asja mida tähele tuleks panna: 1. It stills prints out "one" "two" "three" 2. Do NOT quote "$list", if you want the 'for' command to use multiple items
Kui sa kasutad „$list“ „for“ real, siis ta prindib välja üksiku rea, „one two three“.
Edasijõudnud muutujate kasutamine
Braces
Vahepeal sa tahad kohe muutujale järgneda stringiga. See võib põhjustada probleeme, kui sa kasutad tavalist õigekirja „echo $a“, et kasutada muutuja, kuna ksh standartina, üritab „targasti“ parsing muutujate nimes, aga ta ei oska su mõtteid lugeda.
Võrdle järgneva kolme rea erinevusi:
two=2 print one$twothree print one${two}three
Sellist muutujat nagu „twothree“ ei eksisteeri, siis ksh muudab selle tühjaks väärtuseks, esimeses prinditavad reas. Aga kui sa kasutada trakse „{„ et ksh´le selgesõnaliselt näidata. {see on muutuja nimi} Siis ta mõistab et sa tahad muutujat nimega „two“, oleks laiendatud nende kahe tähe keskel.
Arrays
Jah sa saad kasutada „Array“´sid ksh´s, mitte nagu vanades bourne shellides. Süntaks on järgnev:
# This is an OPTIONAL way to quickly null out prior values set -A array # array[1]="one" array[2]="two" array[3]="three" three=3 print ${array[1]} print ${array[2]} print ${array[3]} print ${array[three]}
Erilised muutujad
On mõned „erilised“ muutujad ksh´s, millele ksh ise annab väärtused. Siin on mõned huvitavad:
PWD- alati hetkel kasutuses olev kataloog
RANDOM- erinev number igakord kui sa seda kasutad.
$$- hetkel kasutuses oleva protsessi number
PPID- „vanema protsessi“ ID (aga mitte alati kasutatav funktsioonides)
$?- lahkumise käsk viimaselt käsult, mida skript käivitas.
PS1- sinu „prompt“. „PS1->`$PWD:>`“ on huvitav
$1 kuni $9 – väited 1 kuni 9 edasi antud sinu skriptile või funktsioonile (tegelikult võivad suuremad numbrid olla aga sa pead kasutama trakse selle jaoks)
Erinevad versioonid
On olemas kaks modifitseeritud versiooni ksh93mest, mis lisavad võimaluse manipuleerida graafilist kasutajaliidest: dtksh, mis on osa CDE[2] ja tksh, mis võimaldab ligipääsu Tk widget toolkitile[3].
Mksh[4] mis on aktiivselt arendatud, BSDish-litsentseeritud [5] ksh hõnguline. See on OPENBSDi /bin/ksh [6] otsene järglane ja pdksh [7] troonipärija. Mksh arendus keskendub rohkem koodi teisaldamisele, turva parandustele, UTF-8 [8] ja üritab vältida funktsiooni järjepidevat uuendamist [9]. Oksh on OpenBSD´s /bin/ksh port GNU/Linuxile, mis sisaldab täpselt nii palju lisandeid, et koodi saaks kompileerida GNU/Linuxi süsteemis. Seda kasutatakse standart shellina DeLi Linux [10].
SKsh on AmingaOS [11], mis pakub palju Amiga-spetsiaalseid lisasid nagu näiteks ARexx [12] koostalitlusvõime.
Miks ksh, mitte XYZ programeerimise jaoks?
Bourne shell on olnud „standart“ UNIX shellskripti keele jaoks juba mitu aastat. Kuigi sellel puudub üks väga vajalik asi, lihtsal tasandil. Mõned neist asjadest lisati C-shelli(csh) hiljem. Kuigi, csh ei ole ihaldusväärne kasutada programeerimises mitmetel põhjustel.
Õnneks ksh lisab enamus asju, mida inimesed ütlevad et csh´l on aga sh´l ei ole. Lausa nii palju, et ksh´st sai „POSIX shelli“ põhjaks. See tähendab, et kõik korralikult vastavuses süsteemid peavad omama midagi vastavuses, isegi kuigi seda nüüd nimetatakse sh´ks nagu vana Bourne shelli(nagu näiteks /usr/xpg4/bin/sh on lingitud /bin/ksh, solarises). Täpsemalt öeldes POSIX-vastavuses käitumisega shell on kirjeldatud „IEEE POSIX 1003.2“
KKK
Mis on Kornshell?
Kornshell on käsu ja skriptimise keel
Mis on ksh?
Ksh on programmi nimi, mis teostab kornshelli keelt.
Kas lähtekood on vaba?
Alates 2000aastast on ksh93 võimaldatud, kui osa tarkvara pakist, mille nimi on ast-open software package(ast-avatud tarkvara pakk).
Kui ma muudan koodi, kas ma pean need tegema avalikuks?
Ei, see pole vajalik. Aga kui sa jagad need muudatused laiali pead sa võimaldama, inimestel neid võimalusi saada ja edasi jagada koos allikaga.
Kuidas ma saan noole nupud tööle?
Enamus arvutites peaks see automaatselt toimima. Aga kui esineb probleeme peate kasutama keybindings(kiirklahve), et neid tööle saada
Kasutatud materjal
http://www.kornshell.com <- Kornshell ametlik leht
http://www.bolthole.com/solaris/ksh.html <- Kornshell õpetus Philip Brown poolt
http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html <- Kornshell õpetus kistler@gmx.net poolt
http://docstore.mik.ua/orelly/unix/ksh/ <- Kornshell õpetus Bill Rosenblatt poolt