next up previous contents index
Next: Finne ein kommando med Up: C skallet Previous: Redirigering av I/O med

Skall-programmering under csh

C-skallet støttar skall-programmering, men programmeringsspråket er veldig for skjellig frå det ein finn i andre skall. Likevel vil ein finne dei same funksjonane. Istaden for operasjonen:

for var in liste
do
done
har csh operatoren foreach , som vert terminert med end:

61 csh:zevs{trondk} > foreach var ( hallo hadi )
? echo $var
? end
hallo
hadi
62 csh:zevs{trondk} >
Det er fleire ting som er verdt å merke seg i dette eksemplet; for det første, lista er omgitt av parentesar ( ein kan sjølvsagt bruke utdata frå kommandoar istaden for ei konkret liste); for det andre, csh sin ekvivalente til PS2 er ? ( eit spørsmålstegn ); og for det tredje, der er ingen do...done kommando. Ein kan utføre ein test og eksekvere kommandoar dersom testen er sann, med if...then...endif . Ordet then må stå på same linje som if, og testen må vere omgitt av parentesar.

 62 csh:zevs{trondk} > cat eksisterer-fil.csh
if ( -e $1 ) then
		echo fila $1 eksisterer
else
		echo fila $1 eksisterer ikkje
endif
63 csh:zevs{trondk} > csh -f eksisterer-fil.csh /etc/passwd
fila /etc/passwd eksisterer
64 csh:zevs{trondk} >
Det eksisterer fleire test operatorar i tilleg til -e, som returnerer sant dersom ei fil eksisterer. Ei komplett liste kan ein finne man-sidene for csh. Nokre av dei mest vanlege operatorane er -r, som returnerer sant dersom ein har lese-aksess til ei fil; -f, som returnerer sant dersom ei fil er ei ordinær fil; og -d, som returnerer sant dersom ei fil er ein katalog. Ein kan også samanlikne numeriske verdiar, og bruke vanlege aritmetriske operatorar:

 64 csh:zevs{trondk} > cat nummer-test.csh
set x=1
if ( $x - 1 ) then
		echo SANT eller ulik null
else
		echo USANT eller lik null
endif
65 csh:zevs{trondk} > csh -f nummer-test.csh
USANT eller lik null
66 csh:zevs{trondk} >
Som vi ser så støttar csh numeriske operasjonar utan ein expr kommando. På den andre sida støttar ikkje csh operatoren ` ( på engelsk grave )[*] Istaden har brukar csh krøll-parentesar,- { og }, for å teste på retur-verdien frå ein kommando.

if { kommando parametre ... } then
Som vi ser så erstattar krøll-parantesane dei vanlege parantesane i eit slikt uttrykk. C-skallet understøttar også enkle aritmetriske operasjoner i skall-program. I tilleg til set  som vi kjenner frå ksh brukar csh også operatoren @  ( krøll-alfa ) for å utføre ein operasjon på ein variabel. Denne operatoren fungerer ikkje på kommando-linja.

66 csh:zevs{trondk} > cat operator.csh
set x=5
echo $x
@ x++
echo $x
@ x+=32
echo $x
@ = $x + 32
echo $x
67 csh:zevs{trondk} > csh -f operator.csh
5
6
38
70
68 csh:zevs{trondk} >
Pass alltid på å ha mellomrom mellom elementa i tilordningsuttrykk,- på same måte som med expr. Husk også på at @-operatoren ikkje verkar for interaktive skall.

C-skallet sitt fleirvalgsuttrykk er switch ... endsw  . Merk kvart valg med case, og terminer kvart valg med breaksw.


 68 csh:zevs{trondk} > cat skall-program.csh
switch ( $1 )
case 1  :
		      echo "Hallo"
		      breaksw
case 2  :
		      echo "Hadi"
		      breaksw
default         :
		      echo "God dag"
		      breaksw
endsw
69 csh:zevs{trondk} > csh -f skall-program.csh 25
God Dag
70 csh:zevs{trondk} > csh -f skall-program.csh 1
Hallo
71 csh:zevs{trondk} >
Parantesane etter switch er påkrevde, og uttrykket kan også vere uttrykk som evaluerer til ein streng. Dersom uttrykket er ein streng, vil kvart valg bli samanlikna med strengen, og tilhøyrande vil bli utførde heilt til kommandoen breaksw , som vil bryte ut av switch. Dersom ingen av dei aktuelle valg slær til, vil default  bli utført.

Løkker kan ein lage med while ... end . Her må ein også legge testen mellom parentesar.


 71 csh:zevs{trondk} > cat while-test.csh
set x=1
while ( $x < 5 )
		      echo $x
		      @ x++
end
72 csh:zevs{trondk} > csh -f while-test.csh
1
2
3
4
73 csh:zevs{trondk} >
Endå finst fleire operatorar og måtar å programmere på under csh,- men eg vil ikkje gjennomgå meir i denne omgang.
next up previous contents index
Next: Finne ein kommando med Up: C skallet Previous: Redirigering av I/O med
Trond.Kandal@itea.ntnu.no