-
Inleiding
Bij linux worden veel tools geleverd om zelf programmatuur te ontwikkelen.
Eenvoudige toepassingen kunnen als commando's in een tekstfile staan en door
de shell uitgevoerd worden. We noemen dit shell-scripts. Hoewel eenvoudig
in beginsel kunnen hier complexe toepassingen mee gebouwd worden.
Veel opstart scripts zijn in wezen shell scripts. De systeemconfiguratie
is met enige kennis van shell scripting eenvoudig naar eigen wens aan te
passen.
Naast shell scripting bestaan er ook andere talen die op scripting
gebaseerd zijn. We noemen hier perl en python.
Kenmerk van scripting talen is dat de programma's niet naar
machinecode of
zoals bij java naar bytecode omgezet worden.
Shell scripting
Zonder hier op allelei details in te gaan geven we hier een
paar voorbeelden van shell scipts.
Voorbeeld 1 (while loop):
while true
do
sleep 10
echo de tijd vliegt
done
Dit script maakt een eindeloze while-lus (alternatieve notatie is
while :) waarin twee commando's uitgevoerd worden.
Voorbeeld 2 (if then else):
if mkdir jojo
then
echo directory jojo is gemaakt
else
echo directory jojo is niet gemaakt
exit 1
fi
Als het commando mkdir jojo gelukt is krijgen we op het scherm dat het
aanmaken van de directory gelukt is anders volgt er de melding dat de
directory niet gemaakt is en heeft het script als exit waarde 1 (in
tegenstelling tot exit 0 als alles goed gaat).
Het test commando kan handig in combinatie met if gebruikt worden.
if test -w mijnfile
then
echo EINDE >>mijnfile
else
echo mijnfile kan niet geschreven worden.
exit 1
fi
Als mijnfile een schrijfbare file is wordt er de regel EINDE
aangeplakt. In het andere geval volgt een melding dat er niet
geschreven kon worden.
Voorbeeld 3 (for loop):
for i in aap noot mies
do
echo $i > $i
done
De variabele i krijgt achtereenvolgens de waarde aap, noot en mies
Voor elk van deze waarde wordt het commando (het mogen er ook meer
zijn) tusssen de do en done uitgevoerd.
Het echo commando zal de waarde van de variabele i (genoteerd als $i)
naar een file sturen met dezelfde naam.
We krijgen dus een file met de naam aap en als inhoud de tekst aap. Zo
ook de file noot met inhoud noot en de file mies met inhoud mies.
Voor wie de smaak te pakken krijgt zijn er op internet allerlei tutorials over shell-scripting te vinden.
Perl
Perl is ontwikkeld als alternatief voor een de unix tools
awk, sed en grep. In plaats van losse tools die met pipes aan elkaar
gekoppeld kunnen worden is perl een uitgebreide programmeertaal met
toepassingen voor systeembeheer, filebewerking en als commandotaal
voor zogenoemde CGI scripts die op een webserver allerlei functies
kunnen uitvoeren.
Hieronder staat een voorbeeld van een perlscript dat 2 getallen
optelt:
#!/usr/bin/perl
#
# perlscript telop.pl
# Jan Mooij - 24 september 2000
#
$doagain = "ja";
while($doagain eq "ja")
{
$x = &geefgetal;
$y = &geefgetal;
$z = $x + $y;
print "$x + $y = $z\n";
print "Nog een keer? (ja of nee) ";
$doagain = <>;
chop($doagain);
}
#
# en hier volgt de subroutine geefgetal
#
sub geefgetal
{
print "Tik een getal in: ";
$getal = <>;
chop($getal);
$getal;
}
|
Perl tutorials trainingen en vraagbaken zijn in ruime mate op internet voorhanden.
Python
De taal python is ontwikkeld aan het CWI (centrum voor wiskunde en
informatica) in Amsterdam. Python staat hoog in de top-tien van gebruikte programmeertalen.
De taal is object georienteerd en
naast linux ook voor diverse unixen en windows beschikbaar.
Hier een voorbeeld van een python script tel.py dat aangeroepen
kan worden met
./tel.py filenaam en woordjes telt van de tekstfile filenaam
en deze vervolgens gesorteerd afdrukt:
#!/usr/bin/python
#
# python script tel.py
# gevonden door Jan Mooij 24 september 2000
#
from sys import *
from string import *
# Create an empty dictionary.
count = {}
for line in open(argv[1], 'r').readlines():
for word in split(line):
if count.has_key(word):
count[word] = count[word] + 1
else:
count[word] = 1
words = count.keys()
words.sort()
for word in words:
print "%15s\t%10d" % (word, count[word])
|
Het is eenvoudig leerboeken, tutorials en trainingen voor Python op internet te vinden.
Java
Java is een object-georiënteerde programmeertaal die aan een
snelle opmars bezig is.
Voor Java bestaat er naast een aantal commerciele ontwikkelomgevingen
voor linux ook de JDK van sun microsystems.
Het is heel aardig om te zien dat java applicaties inderdaad platform
onafhankelijk zijn. Een programma dat op een mac of onder windows
ontwikkeld is draait ook onder linux en omgekeerd.
Onderstaand optelprogramma is ontwikkeld onder Windos NT en draait
ook onder linux. Het bestaat uit een klasse Calc, die het rekenwerk
kan doen en de hoofdklasse Telop, die het programma opstart en de I/O
voor zijn rekening neemt.
/**
* Telop.java
* Jan Mooij 24 september 2000
* gebruikt de klasse Calc om som te berekenen
*/
import java.io.*;
import java.text.*;
public class Telop
{
public static void main(String[] args) throws IOException, ParseException
{
NumberFormat nf = NumberFormat.getInstance();
BufferedReader mijnIn = new BufferedReader(new
InputStreamReader(System.in));
Calc rekenaar = new Calc();
System.out.print("Type een getal: ");
String s1 = mijnIn.readLine();
double a = nf.parse(s1).doubleValue();
System.out.print("Type nog een getal: ");
String s2 = mijnIn.readLine();
double b = nf.parse(s2).doubleValue();
System.out.println("De som is: " + rekenaar.geefSom(a,b));
System.out.println("Het verschil is: " + rekenaar.geefVerschil(a,b));
}
}
/**
* Calc.java
* Jan Mooij - 24 september 2000
* heeft methoden om som en verschil van a en b te berekenen
*/
public class Calc
{
private double a, b;
Calc ()
{
a = 0;
b = 0;
}
Calc (double a, double b)
{
this.a = a;
this.b = b;
}
public double geefSom(double a, double b)
{
return a+b;
}
public double geefVerschil(double a, double b)
{
return a-b;
}
}
|
Je kunt deze java files compileren met het commando javac *.java en
vervolgens runnen met java Telop.
C en C++
De c-compiler is onder linux aan te roepen met het commando cc
Voorbeeld:
cc mijnprogramma.c
Het bestand mijnprogramma.c wordt vertaald met als resultaat een
executable met de naam a.out. Deze a.out is uit te voeren. Vaak
wil men de executable een andere naam dan a.out geven. Dit gaat
als volgt:
cc -o mijnprogramma mijnprogramma.c
De executable heet nu mijnprogramma.
Ook een C++ compiler wordt standaard met vrijwel alle distributies
van Linux meegeleverd.
Hieronder staat een voorbeeld van een c programma dat twee getallen
optelt:
/**
* telop.c
* auteur Jan Mooij - 24 september 2000
*/
#include
char regel[80]; /* regel met input data */
double a; /* eerste getal */
double b; /* tweede getal */
double som; /* som van a en b */
main()
{
(void) printf("geef a en b: ");
(void) fgets(regel, sizeof(regel), stdin);
(void) sscanf(regel,"%lf %lf", &a, &b);
som = a + b;
(void) printf("de som is %lf\n", som);
return (0);
}
|
Wat heb je geleerd?
- Je hebt kennis gemaakt met enkele mogelijkheden om te programmeren:
- Je kunt een bash shellscript maken en runnen, je kunt een perl en
pyhon script runnen en je kunt een c programma compileren en
runnen.
- Je kunt tutorials en documentatie vinden over deze talen op het
internet.
Opdrachten thema 5
Programmacode van de voorbeelden zijn de bestanden:
Calc.java,
tel.py,
telop.c,
telop.pl en
Telop.java.
- Probeer de 4 voorbeelden van de bash scripts uit. Noem ze
achtereenvolgens slaap, jojo, testing en forlus en zet bij elk
#!/bin/bash in de eerste regel. Zorg dat de scripts executabel
zijn met chmod +x.
- Maak het bovenstaande perl script telop.pl en run het
met ./telop.pl
- Breidt het perl script uit met een aftrekking, vermenigvuldiging en
deling van de twee getallen en noem het nieuwe script reken.pl.
- Maak het bovenstaande python script tel.py en run het met ./tel.py
- Maak het bovenstaande c programma telop.c, compileer het met
cc -o telop telop.c en run de executable telop.
- Breidt ook dit c progamma uit met een aftrek-, vermenigvuldig- en
deelfunctie en noem dit nieuwe programma reken.c
- Alleen voor de liefhebbers: Doe hetzelfde als de vorige opdracht voor de
java programma's.
| | | | |