Von PHP über Perl, Ruby und Java – das sind die Sprachen für Linux-Programmierer

In Windows zu programmieren ist nicht jedermanns Sache. Sprachen müssen erst aufwändig installiert werden, die Programmierung ist häufig unnötig kompliziert. Wer’s nicht glaubt, soll sich einmal den Windows Scripting Host näher ansehen.

Linux ist anders. Wichtige Sprachen wie C, Perl und PHP sind mit an Bord oder lassen sich mit einem Handgriff nachinstallieren. Das Angebot der Sprachen reicht vom simplen aber mächtigen Bash-Skript bis hin raffinierten Skriptsprachen wie Python. Der Vorteil dieser Sprachvielfalt in Linux: Hier findet sich für jeden Zweck und für jeden Kenntnisstand die richtige Sprache. Alles, was Sie brauchen, ist ein wenig Zeit und ein Programmierprojekt.

Bash-Skript

Bash-Skript ist die Sprache, um Verwaltungsarbeiten auf der Linux-Shell zu automatisieren. Wer unter DOS oder Windows einmal mit Batch-Dateien gearbeitet hat, kennt das Prinzip: Nacheinander werden Programmaufrufe und Kommandozeilenbefehle in das Skript geschrieben.

Allerdings kann ein Bash-Skript deutlich mehr als sein Windows-Pendant, zum Beispiel Schleifen oder IF-Statements. Um mit Bash zu programmieren müssen Sie nichts weiter installieren – alles ist an Bord. Ein typisches Skript sieht so aus:

#!/bin/sh

for filename in *

do

 test -f “$filename” || continue

 newname=`echo $filename | sed ‘s/ /_/g’`

  if [ “$filename” != “$newname” ]

  then

   if [ -e $newname ]

   then

    echo “Datei $newname existiert bereits.”

    echo “$filename wird nicht umbenannt.”

   else

    echo “Benenne um: $filename -> $newname”

    mv “$filename” “$newname”

   fi

  fi

done

Die erste Zeile gibt dem Skript einen Hinweis darauf, wo der zuständige Interpreter steckt. Danach geht es gleich in eine erste Schleife. Die holt nacheinander jeden Datei- und Ordnernamen aus dem aktuellen Verzeichnis. Mit dem do beginnt dann die eigentliche Schleife. Darin führen Sie zunächst einen Test aus, ob es sich bei dem ermittelten Namen wirklich um eine Datei und nicht etwa um ein Verzeichnis handelt. Ist es eine Datei, geht es in der nächsten Zeile weiter. Ist es keine, wird die Schleife mit dem nächsten Eintrag aus dem Verzeichnis fortgesetzt.

Die nächste Zeile ersetzt im Dateinamen alle Leerzeichen mit einem Unterstrich. Hierfür zuständig ist das Programm sed, das seinerseits einen Regulären Ausdruck nutzt. Entscheidend in der Zeile sind die beiden “Backtick” genannten, nach links geneigten Anführungszeichen. Die sorgen dafür, dass die Ausgabe aus echo $filename… an das Skript zurückgegeben und in die Variable newname übernommen werden. Danach prüft das Progrämmchen noch, ob es bereits eine Datei mit dem in $newname gespeicherten Namen gibt. Dafür zuständig ist [ -e $newname ]. Das -e steht für “exists”, also die Nachfrage, ob der Name bereits vorhanden ist. Falls ja, gibt es eine Fehlermeldung und es geht mit dem nächsten Eintrag weiter. Falls nein, wird die Datei umbenannt.

Schön zu erkennen sind die Besonderheiten in den Schleifen- und If-Konstruktionen. Währen die in Programmiersprachen meist mit geschweiften Klammern umschlossen werden, gelten hier Schlüsselwörter wie fi für das Ende einer If-Konstruktion oder done zum Beenden einer Schleife.

PHP 5

Linux ist die ideale Entwicklungsplattform für PHP. Die unter Web-Programmierern beliebte Sprache ist – nicht zuletzt dank üppiger Ressourcen im Netz – einfach zu lernen.

Um PHP auf Ihrem Linux-System nutzen zu können, melden Sie sich als root auf der Shell an und geben ein

yast -i php5

Danach folgen Sie den Anweisungen des Installationsprogramms.

Je nach Neigung bedient sich der Programmierer bei PHP 5 eines objektorientierten Ansatzes oder programmiert mit Funktionen. Beide Konzepte lassen sich auch mischen. Überhaupt ist PHP, wie auch andere Skriptsprachen, ausgesprochen freizügig und flexibel – und verzeiht eine Menge Fehler. Das ist aber auch ein Nachteil. Wer sich mit PHP an größere Projekte wagt und dabei nicht eiserne Disziplin übt, kommt leicht in den Wald. Das liegt zum Beispiel daran, dass Variablen nicht explizit deklariert werden müssen. Sobald ein

$meinwert = 10;

auftaucht, gilt $meinwert als deklariert. Dumm nur, wenn später ein Tippfehler vorkommt wie

$minwert += 1;

Dann erzeugt PHP zusätzlich die Variable $minwert und Sie haben einen schwer zu findenden Fehler in Ihrem Skript.

Eine weitere Eigenschaft von PHP und anderen Skriptsprachen ist die fehlende Typisierung. Sie können

$meinwert = 10;

$meinwert = ‘Hallo’;

ohne weiteres nacheinander in einem Skript verwenden. Sprachen wie Java oder C würden sich bitter beschweren, dass Sie die Variable einmal für einen Integer (10) und einmal für einen String (‘Hallo’) verwenden. Diese Freiheit ist einerseits sehr bequem für Programmierer. Andererseits ist es auch eine Fehlerquelle, etwa dann, wenn eine Variable einen Zahlenwert erwartet aber einen String bekommt. PHP meldet dann keinen Fehler, sondern verarbeitet den String weiter – das kann böse Folgen haben.

Ein typisches PHP-Progrämmchen sieht so aus:

<?php

 $strHello = ‘Hallo Welt!’;

 

 echo $strHello . ‘ ist ‘. strlen($strHello) . ‘ Zeichen lang.<br/>’;

?>

Die beiden Tags <?php und ?> brauchen Sie, falls das Programm auf einem Webserver ausgeführt wird. Damit zeigen Sie, dass innerhalb der Tags ausführbarer PHP-Code liegt. Außerhalb der Tags können Sie wie gewohnt HTML-Anweisungen verwenden.

Im Programm selbst weisen Sie zunächst der Variablen eine Zeichenkette zu. Wichtig: Variablen in PHP müssen immer mit vorangestelltem Dollarzeichen geschrieben werden. Danach bringt eine Ausgabezeile den Inhalt der Variablen auf den Bildschirm und hängt dahinter ein kurzes Textstück. Als Verbindungsstück dient bei PHP der Punkt. Mit im Spiel ist die Funktion strlen(). Die ermittelt die Länge der in $strHello gespeicherten Zeichenkette. Am Schluss folgt noch ein kleines HTML-Tag <br/>, das im Web-Browser einen Zeilenumbruch erzeugt.

Wenn Sie Ihr PHP-Programm von der Kommandozeile aus verwenden wollen, probieren Sie es mit

php5 -e meinprog.php

Statt meinprog.php schreiben Sie den Namen Ihres PHP-Programms. Alternativ dazu tippen Sie als erste Zeile des PHP-Skripts:

#!/usr/bin/php5

Je nach verwendeter Linux-Distribution kann hier auch ein anderer Pfad notwendig sein. Danach machen Sie das Skript mit dem Befehl

chmod 744 meinprog.php

ausführbar und starten es mit

./meinprog.php

Falls Sie Ihr PHP-Skript in einem Browser ausprobieren wollen, brauchen Sie zusätzlich den Apache-Server, den Sie mit Yast einrichten. Öffnen Sie in Yast das Menü Software – Software installieren oder löschen und suchen Sie darin mit [Alt – S] nach “Apache”. Wählen Sie aus der Ergebnisliste die Einträge apache2 und apache2-mod_php5.

Danach starten Sie den Server mit

rcapache2 start

und probieren es im Browser Konqueror mit der Adresse:

http://localhost/meinprog.php

ein. Sofern das Programm zuvor in den richtigen Ordner /srv/www/htdocs gelegt wurde, sollte nun die Ausgabe des Programms erscheinen.

Perl

Perl ist die Eierlegende Wollmilchsau unter den Skriptsprachen. Sie eignet sich hervorragend für Systemverwaltungsaufgaben, etwa das Filtern großer Textmengen. Natürlich lassen sich auch umfangreiche Aufgabenstellungen mit Perl bewältigen. In der Regel ist Perl auf Linux-Systemen vorinstalliert.

Ein simples Perl-Programm sieht so aus:

#!/usr/bin/perl -w

$strOldFileName=”;

$strNewFileName=”;

while (defined($strOldFileName = <*>))

{

print $strOldFileName;

if (! -f $strOldFileName) {

print ” ist ein Verzeichnisn”;

next;

}

$strNewFileName = lc($strOldFileName);

 

if ( -e $strNewFileName)

{

print ‘ FEHLER: ‘.$strNewFileName.’ bereits vorhanden’;

}

else

{

rename($strOldFileName, $strNewFileName);

print ‘ umbenannt in ‘.$strNewFileName;

}

print “n”;

}

Typisch für Perl und auch für PHP ist die Unterscheidung zwischen einfachen und doppelten Anführungszeichen. Wird ein String bei der Ausgabe mit print von doppelten Anführungszeichen umschlossen, so interpretiert Perl darin enthaltene Codes wie n für den Zeilenumbruch.

Ruby

Eine Skriptsprache mit besonderem Charme ist Ruby. Wie PHP und Perl ist sie locker typisiert. Im Gegensatz zu den beiden Sprachen ist sie aber streng objektorientiert. Praktisch alles gilt in Ruby als Objekt – auch eine Zahl oder Zeichenkette. Eine Zeile wie

print “hallo”.capitalize

ist in Ruby ausführbarer Code und wandelt den ersten Buchstaben der Zeichenkette “hallo” in einen Großbuchstaben um. Das Ergebnis:

Hallo

Die Methode capitalize wird hierbei auf den String “hallo” angewandt, ohne dass dieser zunächst in einem Objekt gespeichert wurde. Die Zeichenkette selbst ist das Objekt.

Natürlich geht’s auch ganz sauber mit Variablen:

meinevar = “hallo”

meinevar = meinevar.capitalize

print meinevar

Ein Beispiel für ein Ruby-Programm:

aFile = File.new(“access_w.log”, “r”)

counter = 0

searchpattern = /googlebot/i

 

aFile.each_line { |line|

  if line =~ searchpattern

  counter += 1

 end

}

print counter, ” Eintraege von Googlebot”

Zunächst wird ein neues File-Objekt erzeugt. Dieses erhält als Parameter den Dateinamen, hier den Namen eines Logfiles und den Zugriffsmodus. r steht für den Lesemodus. Danach erhalten die Variablen counter und searchpattern ihre Werte. Auffällig ist, dass das Suchmuster /googlebot/i hier nicht in Anführungszeichen steht. Anhand der Schrägstriche erkennt Ruby, dass es sich um einen Regulären Ausdruck handelt und erzeugt eine Variable vom Datentyp Regexp.

Danach geht es in einer Schleife durch die Datei. Mit der Methode each_line holt das Programm immer wieder die nächste Zeile, bis das Dateiende erreicht ist. Die jeweils aktuelle Zeile landet in der Variablen line. Dafür sorgen die beiden senkrechten Striche, die direkt auf die geschweifte Klammer folgen – das ist ein wenig gewöhnungsbedürftig.

In der Schleife selbst wird line darauf untersucht, ob das Suchmuster aus searchpattern passt. Der hierfür verwendete Operator =~ kommt genauso in Perl vor.

Trifft das Suchmuster auf eine Zeile zu, zählt das Skript den Zähler um eins herauf. Zum Schluss gibt unser Beispielprogramm das Ergebnis aus. Um nach der Variablen weiteren Text auszugeben, wird dieser nach einem Komma angehängt.

Um Ruby auszuprobieren, installieren Sie es über Yast. Suchen Sie in Software – Software installieren oder löschen nach ruby und installieren Sie das Paket

ruby.

Ausführen lässt sich das Beispielprogramm entweder mit dem Aufruf

ruby < progname.rb

Oder Sie machen die Datei mit

chmod 744 progname.rb

ausführbar und setzen in die erste Zeile die Anweisung

#!/usr/bin/ruby

Je nach verwendeter Linux-Distribution kann hier auch ein anderer Pfad notwendig sein.

Richtig interessant wird Ruby im Zusammenspiel übrigens mit dem Framework “Ruby on Rails”. Wer datenbankgestützte Webseiten entwickeln will, ist gut beraten, sich “Ruby on Rails” einmal anzusehen, bevor er in einer anderen Sprache loslegt.

Python

Wie Ruby ist Python objektorientiert. Anders als die meisten Skriptsprachen verzichtet es aber bei der Strukturierung des Programmcodes, also bei Schleifen oder If-Konstruktionen, auf geschweifte Klammern. Blockstrukturen werden über das Einrücken der Code-Zeilen erzeugt.

Python erlaubt ebenso witzige wie einleuchtende Konstruktionen. Um zum Beispiel zehn Minuszeichen nacheinander auszugeben, reicht die Programmzeile

“-“*10

Auch der Umgang mit Zeichenketten ist ein leichtes in Python. Wer zum Beispiel aus dem Wort “Donaudampfschiff” den “dampf” herausziehen will, braucht nur dies:

“Donaudampfschiff”[5:10]

Natürlich funktioniert das auch mit in Variablen gespeicherten Zeichenketten.

Ein kurzes Beispiel für ein Python-Programm:

#!/usr/bin/python

import re

filename = ‘access_w.log’

counter = 0

f = open(filename, ‘r’)

for line in f:

if re.search(‘[Gg]ooglebot’, line):

counter = counter + 1

 

print “Googlebot wurde ” + str(counter) + ” mal gefunden”

Die erste Zeile zeigt dem Programm, wo es den Interpreter finden soll. Bei anderen Linux-Distributionen als Suse kann das auch ein anderer Pfad sein.

Danach importiert Python ein Modul namens re. Das enthält alle notwendigen Werkzeuge für den Umgang mit Regulären Ausdrücken. Neben diesem Modul gibt es noch zahlreiche weitere vorgefertigte Module, die das Programmieren mit Python enorm erleichtern – und beschleunigen.

Danach geht es weiter mit der Zuweisung von zwei Variablen. Auch bei Python müssen Sie dabei keinen Typ angeben. Danach geht es ans Öffnen der Datei mit open. Die Schleife danach holt nacheinander jede Zeile aus der Datei und speichert sie in line. Anschließend prüft das Programm mit Hilfe des Regulären Ausdrucks, ob in der Zeile “Googlebot” vorkommt, wahlweise mit großem oder kleinem Anfangsbuchstaben. Ist das der Fall, zählt das Skript den Zähler counter um eins hinauf. Zum Schluss gibt eine print-Anweisung das Ergebnis aus.

C, Java und .NET

Die Programmiersprache schlechthin für Linux ist C oder dessen objektorientierte Variante C++. Die daraus erzeugten Programme sind sehr schnell und für alle Aufgaben geeignet, die hohen Rechenaufwand erfordern. Allerdings ist C nicht ganz einfach in der Programmierung.

C-Programme werden kompiliert, also in Maschinensprache übersetzt. Im Gegensatz zu anderen hier vorgestellten Sprachen, die erst während des Programmablaufs übersetzt werden, laufen C-Programm deshalb deutlich schneller. Der Nachteil: Vor jedem neuen Programmlauf müssen Sie den Quelltext kompilieren – bei großen Projekten kann das eine Weile dauern.

Um C-Programme zu erzeugen, brauchen Sie unter Linux einen Texteditor und einen C-Compiler. Sofern der nicht bereits installiert ist, holen Sie ihn mit yast -i gcc auf Ihr System. Außerdem benötigen Sie Bibliotheken. Das sind Dateien, die bereits vorgefertigte Funktionen enthalten, beispielsweise für typische Betriebssystemsoperationen. Eine Grundausstattung an Bibliotheken ist bei Linux dabei.

Probieren Sie es einmal mit einem kleinen Programm:

#include <stdio.h>

#include <string.h>

char *string_tolower(char *string);

int main (int argc, char *argv[])

{

 if (argc != 2)

 {

  printf(“Benutzung: %s Stringn”, argv[0]);

  return(1);

 }

 else

 {

  string_tolower(argv[1]);

  printf(“Kleinschreibung: %sn”, argv[1]);

 }

 return(0);

}

char* string_tolower(char *string)

{

 int i;

 

 for (i=0; string[i]; i++)

 {

  string[i] = tolower(string[i]);

 }

 return string;

}

 

 

Mit den include-Befehlen in der ersten und zweiten Zeile binden Sie die Bibliotheken für die Ein- und Ausgabe sowie für die Verarbeitung von Zeichenketten ein. Danach müssen Sie die erste Funktion deklarieren: Mit char legen Sie fest, dass der Rückgabewert der Funktion ein String ist, also eine Zeichenkette. Als Parameter erwartet die Funktion einen weiteren String. Die Funktion selbst steht weiter unten im Text.

Als erstes kommt eine spezielle Funktion zum Zuge: main ist in jedem C-Programm enthalten. Die beiden Parameter stehen für die Zahl der dem Programm übergebenen Parameter und für das Array, in dem sich die einzelnen Parameter befinden. Der Parameter argv[0] ist übrigens immer der Programmname selbst.

Falls nicht genau zwei Parameter – also der Programmname und der einzugebende String – vorhanden sind, bricht das Programm mit einem Benutzerhinweis ab. Passt hingegen alles, wird die Funktion string_tolower aufgerufen, die den in argv[1] enthaltenen Wert als Parameter mitbekommt. Die Funktion nimmt sich diesen String und geht ihn in einer Schleife Zeichen für Zeichen durch. Dabei wird jedes einzelne Zeichen von der Funktion tolower() in einen Kleinbuchstaben verwandelt. Ist die Funktion beendet, gibt ein printf das Ergebnis aus.

Java und .NET

Für Programme, die mit Windows, Linux und auch auf dem Mac problemlos laufen sollen, ist Java die erste Wahl. Hierbei handelt es sich um eine objektorientierte Sprache mit gigantischem Funktionsumfang. Mehr dazu unter http://java.sun.com/.

Das von Microsoft für Windows-Plattformen vorgesehene .NET-Framework hat einen Linux-Bruder. Ziel des Projekts Mono ist, möglichst viel Funktionalität des .NET-Frameworks abzubilden. In vielerlei Hinsicht klappt das auch schon ganz gut. Mehr Info: http://www.mono-project.com/Main_Page

Tipps für Einsteiger

Alternativen zur Programmierung

Bevor Sie anfangen zu programmieren, sollten Sie immer nachsehen, ob es nicht schon ein Linux-Tool gibt, das Ihre Aufgabe erledigt. Typische Tools sind

grep – zum Durchsuchen von Dateien oder zum Filtern von Ausgaben

awk – zum Durchsuchen von tabellenartigen Listen

sed – zum Suchen und Ersetzen von Texten

Klein anfangen

Möchten Sie mit der einen oder anderen Skriptsprache Ihre ersten Gehversuche in Sachen Programmierung unternehmen? Dann fangen Sie mit kleinen Schritten an: Nehmen Sie sich ein kleines Projekt vor, etwa das Auswerten von Log-Dateien und setzen Sie dieses um. Erst wenn Sie auf diese Weise Bekanntschaft mit der Sprache geschlossen haben, sollten Sie sich an größere Aufgaben wagen.

Alles auch für Windows

Perl, PHP, Ruby oder Python sind typische Sprachen aus dem Linux-Umfeld. Doch natürlich gibt es diese Sprachen auch in Windows-Versionen. Die finden Sie auf den Homepages der jeweiligen Sprachen zum Download.

Am Anfang Kopieren und Lernen

Sie möchten eine neue Sprache lernen? Dann suchen Sie sich auf den einschlägigen Seiten Quelltext, kopieren Sie diesen und ändern Sie ihn nach Belieben. Auf diese Weise lernen sie schnell, Struktur und Syntax einer Sprache zu verstehen.

Glossar und Links

Array

Ein Array fasst unter einem Namen mehrere Werte zusammen. In der einfachsten Form nummeriert das Array die Einträge einfach durch. So kann meinarray[0] den Text “heinz” enthalten und meinarray[1] den Text “Otto”.

Compiler

Ein Compiler übersetzt den Programmtext (Source-Code) in eine für den Computer direkt ausführbare Maschinensprache. Erst danach ist das Programm ausführbar.

Interpreter

Ein Interpreter übersetzt den Programmtext (Sourcecode) während des Programmablaufs in für den Computer ausführbare Maschinensprache. Dadurch entfällt das compilieren. In der Regel sind interpretierte Programme langsamer.

Skriptsprache

Skriptsprachen waren ursprünglich zum Lösen kleiner Aufgabenstellungen und zum Entwurf logischer Abläufe in Programmen vorgesehen. Lästige Aufgaben wie das Deklarieren und Typisieren von Variablen entfallen bei Skriptsprachen – das beschleunigt das Programmieren, provoziert aber auch eine Menge Fehler. Bekannte Skriptsprachen sind PHP, Python, Ruby oder Javascript.

Objektorientiert

Objektorientierte Programmierung folgt einem besonderen Denkansatz: Bestandteile des Programms werden als Objekte betrachtet, die bestimmte Eigenschaften haben und auf die der Programmierer bestimmte Methoden anwenden kann. Ein Beispiel aus der realen Welt: Das Objekt Ball hat die Eigenschaften “rund”, “leder” und “rot”. Sie können die Methoden “treten”, “rollen” und “fangen” darauf anwenden.

Regulärer Ausdruck

Reguläre Ausdrücke beschreiben Teile von Zeichenketten, indem Sie bestimmte Muster festlegen. Mit einem Regulären Ausdruck ließe sich zum Beispiel beschreiben: “Die Zeichenkette muss mit einem A beginnen, darf mindestens eine Ziffer, aber höchstens fünf Ziffern enthalten und muss auf Z enden.” Mit Hilfe der Regulären Ausdrücke lassen sich noch viele weitere Muster schreiben, beispielsweise, um E-Mail-Adressen automatisch zu erkennen.

Links

C-Workshop * http://wwwuser.gwdg.de/~kboehm/ebook/inhalt.html

PHP-Homepage * http://www.php.net/

Ruby Homepage * http://www.ruby-lang.org/en/

Ruby on Rails * http://www.rubyonrails.org/

Python Homepage * http://www.python.org/

Perl Homepage * http://www.perl.org/

Ähnliche Beiträge