Shellscript Programmierung

Die Shell

Unix ist f�r viele Dinge bekannt. F�r seine Leistungsf�higeit. F�r seine Modularit�t. F�r seinen monolithischen Kernel. F�r viele, viele kryptische Befehle. Und: F�r seine Shell.

Googlism

Googlism ist immer f�r eine �berraschung gut. Die Suche nach shell ergab die ziemlich genaue Definition:

shell is a program that interprets commands and acts as an intermediary between the user and the inner workings of the unix system

Nat�rlich m�chte ich dem gesch�tzten Leser auch ein paar unterhaltsame Blindg�nger nicht vorenthalten:


Es gibt dann noch ein paar weitere Definitionen von Googlism, die die Sache ziemlich gut auf den Punkt bringen:


Shell, was ist das?

Die Shell ist die Textschnittstelle zwischen Unix und Benutzer. Es gibt viele Spielarten. Beispielsweise:


sh: die Bourneshell.

Die Skriptsprache der Bourneshell war urspr�nglich ein C, das ziemlich stark mutiert wurde. F�r viele, viele Dinge wurden einfach #defines (=C-Makros) geschrieben, beispielsweise wurde IF zu if(, THEN zu ){ und FI zu }.


ksh: die Kornshell.

So praktisch die Bourneshell war, sie hatte einige Unsauberkeiten. Diese wurden durch die Kornshell behoben.


bash: die Bourne AGAIN shell.

Entstand relativ sp�t und ist die Linux-Standarshell.


csh: die C shell.

Im Prinzip wie die sh, jedoch mit stark an C orientierter Syntax.

Shellscript, was ist das?

Immer wieder die gleichen Befehle einzutippen wird mit der Zeit m�hsam. Entsprechend kann man sich ein einfaches Skript schreiben. Jedes Skript fang �blicherweise mit einem Link auf den zu verwendenden Interpreter an, beispielsweise:

#!/bin/bash

oder

#!/bin/rm -f

oder

#!/bin/cat


W�rend erstere Interpreterzeile den Inhalt der Datei an die bash �bergibt, l�scht zweitere einfach das Programm. Als Interpreter kann man schlie�lich jedes Unix-Kommando eintragen.

Mit Zeile drei schlie�lich gibt man das gesamte Programm aus. Sowas, ob sinnvoll oder nicht, geht mit anderen Programmiersprachen bei weitem schwieriger!

Das klassische Hello-World Programm

mit der bash nur zwei Zeilen:


#!/bin/bash
echo hello, world!


Eine Datei zeilenweise einlesen

Geht mit folgendem Snippet:


$ cat readin


#!/bin/bash
cat $1 | while read a; do
echo $a
done


$ readin /etc/passwd

...