5 Programmeren in linux

  • 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:
      • bash
      • perl
      • python
      • java
      • c
    • 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.
    1. 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.
    2. Maak het bovenstaande perl script telop.pl en run het met ./telop.pl
    3. Breidt het perl script uit met een aftrekking, vermenigvuldiging en deling van de twee getallen en noem het nieuwe script reken.pl.
    4. Maak het bovenstaande python script tel.py en run het met ./tel.py
    5. Maak het bovenstaande c programma telop.c, compileer het met cc -o telop telop.c en run de executable telop.
    6. Breidt ook dit c progamma uit met een aftrek-, vermenigvuldig- en deelfunctie en noem dit nieuwe programma reken.c
    7. Alleen voor de liefhebbers: Doe hetzelfde als de vorige opdracht voor de java programma's.

     

     

    Aangemaakt 5 december 1999
    Laatst bijgewerkt januari 2016