Ksh

From ICO wiki
Revision as of 21:14, 2 May 2011 by Ikrustok (talk | contribs)
Jump to navigationJump to search

Kornshelli pilt

Originaali autor:

David G. Korn[1]

Avalikustatud:

14.juuli 1983

Operatsioonisüsteem:

rist platvorm

Litsents:

AT&T ksh, mksh, pdksh

Veebileht:

www.kornshell.com/

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.

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