Help - Zoeken - Gebruikers - Kalender
Volledige versie: Bash script handleiding deel 2b
MandrivaClub.NL > Forum > Documentatie en Programmeren
boudewijn
Zo,


Ik wilde het vandaag over functies gaan hebben in deze handleiding., en ga er ook hier weer vanuit dat je de voorgaande delen hebt gelezen.

Om te beginnen zijn functies een item dat erg handig is om te snappen; het principe ervan komt namelijk zo'n beetje in elke bestaande taal terug (Java, Bash, Basic, Perl, C++, C, noem maar op), wordt soms (zeker in de Java werled) ook wel een 'methode' genoemd.Een functie zul je dan in de grotere programmas ook erg veel gebruiken, zeker als je veel werk wil laten doen met weinig code. Zo'n functie moet je een beetje zien als een trucje dat uit een aantal regels code bestaat, en je kunt dat trucje zoveel keer uit laten voeren als je wil. Ok, genoeg theorie laten we eens een voorbeeld bekijken:

Stel, ik schrijf een programma dat telkens 2 getallen neemt en het gemiddelde van die 2 getallen op het scherm zet.

Dat zou er dan zo uit kunnen zien:

CODE


#!bin/bash

getal1=10

getal2=20

echo "(getal1+getal2)/=2"






Hiermee introduceer ik weer een nieuw concept, de 'operator'. Een operator is een (relatief) simpele functie die vaak iets met wiskunde te maken heeft.

De tekens voor de operatoren: + - * / % Ik neem aan dat iedereen ze kent , ze doen namelijk hetzelfde als in het 'gewone leven'. Ik zal wel echter de modulo operator even uitleggen, het kan namelijk zo zijn dat niet iedereen deze kent.

A = b % c zorgt er voor dat c van b af wordt getrokken, zolang b positief is. Als b de laagste postieve waarde bereikt, wordt deze in a opgeslagen.

x = 10%3 levert bijvoorbeeld 1 op.

De 2e parameter van de operator (hierboven de c) heeft als eigenschap dat hij niet hoger is dan de eerste (de cool.gif. Anders klopt de berekening wiskundig gezien niet meer. C mag wel 0 zijn, dat is dan gelijk aan c=b.

Een operator kan verschillende vormen aannemen, als er 2 variabelen bij elkaar opgeteld worden, gebruik je de 'kale' operator. Tel je echter een variable bij een constante op (de 2 in het voorbeeld boven aan deze gids), dan gebruik je de operator met een '=' erachter.Als je dit niet doet, krijg je problemen met je scriptje.


Om even terug te komen op het bovenstaande voorbeeld met die code die het gemiddelde van 2 getallen berekent. Een dergelijk stuk code is ideaal om in een functie te gieten, zeker als je van tevoren die code erg veel wil gebruiken. Het is ook belangrijk dat je een functie (net als een variabele) een goede (lees: toepasselijke) naam bedenkt. Je zou bij deze functie bijvoorbeeld maakGemiddelde als naam kunnen nemen. Je ze ziet dat ik consequent in programma's een naam (zowel van een variabele) schrijf met een kleine letter aan het begin, en dan elk nieuw woord dat er in staat met een hoofdletter begin. Dit doe ik om het leesbaar te houden.

Okay, genoeg theorie; we gaan de functie schrijven!

Nu hebben we een naam van de functie (maakGemiddelde), en we hebben een stukje code dat in de functie komt te staan :

CODE


getal1=10

getal2=20

echo "(getal1+getal2)/=2"



We moeten nu tegen bash zeggen dat we niet zomaar eens tukje code neer zetten, maar een functie:
CODE


maakG{

{



}




Tussen de accolades, kun je de inhoud van je functie zetten:

CODE


maakGemiddelde

{

getal1=10

getal2=20

echo "(getal1+getal2)/=2"

}



Dit is nu al een complete functie, maar als je de bovenstaande code in een script plakt gebeurt er helemaal niks. Een functie moet je namelijk aanroepen. Dit doe je door simpelweg de naam van de functie in te typen.

CODE


#!bin/bash



maakGemiddelde

{

getal1=10

getal2=20

echo "(getal1+getal2)/=2"

}



maakGemiddelde

exit 0



zal dus “15” op je scherm zetten.
HJH
Errug leuk boudewijn!

Mag ik alvast een verzoekje doen om substrings (ik wet niet of het ook echt zo heet) in Bash?
de vorm is als volgt:
CODE


substring ()

{ hiertuseen een verhaal

een vergelijking of een opdracht

die in een loop moet kunnen worden uitgevoerd}




Hendrik-Jan
boudewijn
U vraagt, wij draaien.... kijk vanavond laat nog maar een keer :wink:
HJH
:-)

Service..

danku.

Hendrik-Jan
boudewijn
Wordt toch morgen vrees ik; ik heb het iets te druk :cry:
HJH
Schande!!!! :-D

Nah, is goed.. ik heb nu eigenlijk ook wel wat anders te doen... ;-)

Hendrik-Jan
boudewijn
OK, ben blij dat je er relaxt over denkt :wink:
boudewijn
Ik ben er mee bezig, en verwacht binnenkort wel een leuk verhaal erover neer te kunnen zetten :wink:
Dit is een "Print" versie van onze forums. Om de volledige versie met meer informatie, afbeeldingen en opmaakte bekijken, a.u.b. klik hier.