Aus LinuxUser 05/2006

Einfache Skripte mit Ruby erstellen

Programmieren ohne Hindernisse

Durch und durch objektorientiert mit einfacher, reichhaltiger Syntax: Ruby stellt sich dem Programmierer nicht in den Weg. Ein praktisches Beispiel demonstriert die Möglichkeiten.

Die Web-Seite [1] von Ruby klassifiziert die Sprache als objektorientierte Skriptsprache. Mit diesen Merkmalen eignet sich die Sprache gut, um schnell das ein oder andere Helferlein für die tägliche Arbeit mit Linux zu schreiben. Dies demonstriert das hier beschriebene, kleine Skript: Es liest zwei Verzeichnisbäume ein, vergleicht diese miteinander und gibt die Unterschiede aus. Um die einzelnen Schritte nachzuvollziehen, benötigen Sie eine funktionierende Ruby-Umgebung. Diesen findet sich unter Debian oder Suse im Paket ruby.

Dieser Artikel beschreibt nicht Grundlagen des Programmierens. Hier hilft der Einführungsartikel im Schwerpunkt dieser Ausgabe weiter. Zu Ruby selbst gibt es exzellente, frei erhältliche Bücher ([2], [3], [4], [5]). Eine Dokumentation im HTML-Format enthalten etwa das Suse-Paket ruby-doc-html sowie die Debian-Archive ruby-manual und rubybook. Bei letzterem handelt es sich um das Buch „Programming Ruby“ [3].

Für das schnelle Nachschlagen in der Ruby-Referenz eignet sich der Befehl ri. Er findet sich bei Suse in ruby-doc-ri, unter Debian im Paket ri. Die Referenz ist auch online verfügbar [6]. Auch eine Schnell-Referenz existiert als freies Dokument [7].

Abbildung 1: Das RubyGarden-Wiki ist eine Fundgrube zu Informationen rund um Ruby.
Abbildung 1: Das RubyGarden-Wiki ist eine Fundgrube zu Informationen rund um Ruby.

Für das einfache Ausprobieren empfiehlt sich die Installation von Interactive Ruby. Suse integriert das interaktive Ruby bereits im Paket ruby, bei Debian installieren Sie das Paket irb. Das Programm erlaubt es, interaktiv Befehle auszuprobieren. Mit der Eingabe von exit beendet sich das Testprogramm.

TIPP

Einige Regeln helfen, die Beispiele besser zu verstehen: Variablennamen schreibt man in Ruby klein; Konstanten-, Klassen- oder Objektnamen beginnen mit einem Großbuchstaben. Es hat sich die Konvention eingebürgert, die Namen von Konstanten komplett groß zu schreiben.

Verzeichnisbäume vergleichen

Das Beispiel in diesem Artikel implementiert einen einfachen Vergleich zweier Verzeichnisbäume (siehe Listing 1). Es nutzt die High-Level-Funktionen von Ruby und dessen Bibliotheken getreu dem Motto: Was andere schon programmiert haben, brauche ich nicht selbst zu machen.

Dabei verhält sich dirdiff.rb wie ein waschechter Shell-Befehl, wenn es mit chmod u+x dirdiff.rb das Ausführungs-Recht erhält. So vergleicht ./dirdiff.rb -i ~/.kde ~/backup/.kde das Verzeichnis ~/.kde mit dem Verzeichnis ~/backup.kde. Es zeigt an, welche Dateien in ersterem vorhanden sind, jedoch im Backup-Verzeichnis fehlen und umgekehrt. Aufgrund der Option -i ignoriert das Skript beim Sortieren die Groß- und Kleinschreibung der Pfadnamen.

Abbildung 2: Ein Durchlauf des Skriptes bringt es ans Tageslicht: Der Editor Kate kam beim Editieren des Ruby-Codes zum Einsatz.
Abbildung 2: Ein Durchlauf des Skriptes bringt es ans Tageslicht: Der Editor Kate kam beim Editieren des Ruby-Codes zum Einsatz.

Die erste Zeile des Skripts gibt an, welcher Interpreter zum Einsatz kommt. Der Befehl env findet ruby im Suchpfad. Das hilft, falls ruby nicht in /usr/bin/ruby installiert ist.

Abbildung 3: Gängige Editoren bieten Syntax-Highlighting und mehr für Ruby-Skripte.
Abbildung 3: Gängige Editoren bieten Syntax-Highlighting und mehr für Ruby-Skripte.

In Zeile 3 bindet das Skript eine Klasse zum Auswerten von Befehlszeilen-Argumenten ein. Mit ri OptionParser erfahren Sie im Handumdrehen mehr über diese Klasse, für die es auch ein deutschsprachiges Tutorial [8] gibt.

Aufrufkonventionen

Im Anschluss definiert das Skript in den Zeilen 5 bis 39 zwei Funktionen, von denen später noch die Rede sein wird. Dann setzt es den Standardwert für die Option, ob es Groß- und Kleinschreibung beim Sortieren beachtet, auf false (Zeile 41). Es richtet den Optionen-Parser ein (Zeile 43), indem es die Methode new des neuen Objekts der Klasse OptionParser aufruft. Dazu wird der Methoden-Name durch einen Punkt getrennt an den Objekt-Namen angehängt.

TIPP

Die Ruby-Dokumentation gibt eine Methode oft als OptionParser#new wieder, im Code wird die Methode aber durch einen Punkt (OptionParser.new) vom Objektnamen getrennt.

Beim Aufruf einer Klassenmethode – ohne eine Instanz der Klasse, ein neues Objekt zu erstellen – ändert sich die Syntax: Nun trennen zwei Doppelpunkte den Methodennamen von der Klasse. So prüft File::exists?(".bashrc"), ob im aktuellen Verzeichnis eine Datei namens .bashrc existiert. Starten Sie irb, um das mal schnell auszuprobieren.

Die Tilde ~ als Synonym für den Namen des Home-Verzeichnisses versteht Ruby indes nicht. Sie wird beim Aufruf unseres Beispiels bereits von der Shell durch den entsprechenden Pfad ersetzt. Ruby selbst kann das auch: So ersetzt "~/.bashrc".gsub(/^~/, ENV['HOME']) das erste Vorkommen von ~ durch den Pfad zum Home-Verzeichnis. Bei Ruby ist also selbst eine Zeichenkette ein Objekt. Mit "~/.bashrc".class finden Sie heraus, welcher Klasse es angehört.

LinuxUser 05/2006 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: