UNIX-SHELL-Programmierung
Grundlagen

Programmieren mit der SHELL

Die SHELL ist für den Anwender/Administrator "Befehlsempfänger und Befehlsausführer". Neben den Eigenschaften wie Befehlsinterpretation, Wildcardauflösung, Ein- und Ausgabeumlenkung, Pipelines und Hintergrundverarbeitung kann mit der Shell auch programmiert werden.
Wie bei einer Programmiersprache verfügt die UNIX-SHELL über SHELL-Variablen und Programmiersprachen-Konstrukte (Verzweigungen, Schleifen,...).Dabei kann eine Folge von SHELL-Befehlen in sogenannten SHELL-Scripten (ausführbare Textdateien, SHELL-Scripts) hinterlegt werden. Zusätzlich zu Variablen und Konstrukten können Sie alle verfügbaren SHELL-Befehle (Kommandos) verwenden. Dieses SHELL-Script erzeugen Sie mit einem beliebigen Texteditor, der Name des SHELL-Scripts ist frei wählbar. Der Aufruf des SHELL-Scriptes erfolgt wie ein normales UNIX-Kommando: Sie tippen einfach den Dateinamen ein und drücken die Taste "Enter". Der Benutzer kann folgende Wildcards angeben:

*

für beliebige, 0-n Zeichen lange Zeichenketten

?

für genau 1 Zeichen

[xyz]

für genau eines der Zeichen x, y oder z

[a-f]

für genau ein Zeichen aus dem Bereich a-f (auch für Zahlen z.B. 1-9)

SHELL-Befehle (Kommandos)

Bei vollständig installierten Manual-Pages (Hilfe-Seiten) können zu jedem Kommando die vollständige Syntax abgerufen werden (z.B. man mkdir). Die wichtigsten SHELL-Befehle sind:

 

ls

Zeigt den Inhalt eines Verzeichnisses an

z.B.: ls -l *

cd

Wechselt das Arbeitsverzeichnis

z.B.: cd ..

pwd

Zeigt den absoluten Pfad des Arbeitsverzeichnisses an

z.B.: pwd

mkdir

Erzeugt ein neues Verzeichnis

z.B.: mkdir tgm

rmdir

Löscht ein Verzeichnis

z.B.: rmdir tgm

rm

Löscht angegebenen Dateien

z.B.: rm my_datei

rm -r

Löscht angegebenen Dateien und Verzeichnisse

z.B.: rm -r my_verzeichnis

mv

Benennt Datei oder Verzeichnis um

z.B.: mv alt neu

echo

Zeigt Argumente (Text) am Bildschirm an

z.B.: echo Hallo > hallo.txt

cat

Zeigt den Inhalt von Textdateien an

z.B.: cat hallo.txt

tar -cvf

Verpackt Dateien und Verzeichnissen in ein tar-Archive

z.B.: tar -cvf archive.tar *

tar -tvf

Listet den Inahlt eines tar-Archives auf

z.B.: tar -tvf archive.tar

tar -xvf

Packt eines tar-Archiv aus

z.B.: tar -xvf archive.tar

 

find

Sucht eine Datei oder ein Verzeichniss

z.B.: find . -name mydatei -print

type

Gibt Informationen über das angegebene Element aus

z.B.: type my_element

chmod

Ändert die Zugriffsrechte von Dateien oder Verzeichnissen

z.B.: chmod 755 *

chown

Ändert den Besitzer von Dateien oder Verzeichnissen

z.B.: chown 2awi *

cp

Kopieren von Dateien und Verzeichnissen

z.B.: cp datei datei.sav

chgrp

Ändert die Gruppenzugehörigkeit von Dateien oder Verzeichnissen

z.B.: chgrp my_goup *

wc

Gibt die Anzahl der Zeilen, Wörter und Zeichen einer Datei
aus (wordcount)

z.B.: wc *

|

Pipe - lenkt die Ausgabe eines Kommandos zur Eingabe eines
nachfolgenden Kommandos

z.B.: ls -l * | more

more

gibt die Eingabeinformation seitenweise aus

z.B.: ls -l * | more

 

Umlenkung der Standardausgabe stdout (Bildschirm) - Gutfall
Die Standardausgabe von Kommandos kann auf eine Datei umgelenkt werden. Mit ">" wird eine Datei erzeugt, mit ">>" wird eine vorhandene Datei erweitert bzw. falls nicht vorhanden neu angelegt.

Beispiel:

echo Hallo > Neue_Datei.txt bzw. echo Hallo 1> Neue_Datei.txt
echo hui >> Neue_Datei.txt bzw. echo hui 1>> Neue_Datei.txt

Umlenkung der Standardausgabe stderr (Bildschirm) - Fehlerfall

Die Standardausgabe von Kommandos kann auf eine Datei umgelenkt werden. Mit ">" wird eine Datei erzeugt, mit ">>" wird eine vorhandene Datei erweitert bzw. falls nicht vorhanden neu angelegt.

Beispiel:

ls -l ooooo 2 > Fehler_Datei.txt
ls -l uuuuu 2 >> Fehler_Datei.txt

Umlenkung der Standardeingabe stdin (Tastatur)

Die Standardausgabe von Kommandos kann auf eine Datei umgelenkt werden. Mit "<" wird anstelle der Tastatur aus der angegebenen Datei gelesen.

Beispiel:

wc < Eingabe_Datei.txt

Dateizugriffsrechte und - schutz

Für Dateien und Verzeichnisse (Directories) kann der Benutzer, der sie erzeugt hat (owner), die Zugriffsrechte festlegen oder ändern. UNIX kennt 3 Arten von Zugriffsrechten:

-r

Lesen (read)

-w

Schreiben (write)

-x

Ausführen (execute)

Diese Zugriffsrechte können , in Kombinationen , an 3 Benutzerklassen vergeben werden:

-u

Erzeuger der datei (user = owner)

-g

Benutzergruppe des Eigentümers (group)

-o

alle anderen Benutzer im System (others)

Jeder dieser 3 Benutzerklassen kann Zugriffsrechte-Kombinationen zu einer Datei oder einem Verzeichnis (Directory) erhalten (siehe Kommando ls -l) .

Beispiel:

Benutzerklasse

user

group

other

Dateiname

rw-

r--

--x

Zugriffe (lesen/schreiben/ausführen) beziehen sich bei Dateien ausschließlich auf eine Datei. Zugriffsrechte auf Verzeichnisse gelten für alle darin befindlichen Dateien und Unterverzeichnisse. So entsteht eine hierarchische Ordnung.Ein rasches Abschotten der Dateien kann durch die Zugriffsrechte übergeordneter Verzeichnisse erfolgen.Verzeichnisse bekommen bei der Auflistung mittels ls -l zusätzlich ein "d" (=Directory=Verzeichnis) vorangestellt.

SHELL-Variablen

Schon nach dem login exisitieren eine Anzahl von SHELL-Variablen. Mit dem Befehl set werden diese angezeigt.

Die wichtigsten vordefinierten SHELL-Variablen sind:  

$#

Anzahl der SHELL-Parameter

$1 bis $n

SHELL-Parameter

$?

Exit-Status/Returncode, 0=OK (true)

$HOME

Home-Directory

$PATH

Suchreihenfolge

$LOGNAME

Login Name

$*

Liste der SHELL-Parameter

 

 

SHELL-Variablen enthalten Zeichen oder Zeichenketten. Auch wenn man mit ihnen Rechenoperationen durchführen kann, gibt es keine numerischen SHELL-Variablen. Für Variablen sind Zeichen und "-" (Unterstrich) zulässig. Groß- und Kleinschreibung wird unterschieden. Eine Zuweisung erfolgt durch das "=" (Gleichheitszeichen). Angesprochen werden SHELL-Variablen (nach einer Zuweisung) durch ein "$" (Dollar) vor ihren Namen. Kommentare werden durch das "#" (Gatter) für den Rest der Zeile festgelegt.

Beispiel:

Name="Hugo Meyer"  # "" faßt mehrere Zeichenketten zu einer zusammen
echo $Name                # Bildschirmausgabe des Variableninhaltes

Selbstdefinierte SHELL-Variablen müssen vor der weiteren Nutzung durch andere Programme/Prozesse/Tasks dem System bekannt gemacht (exportiert) werden: export varname (z.B. export $Name bzw. export $Zahl )

Backslash (\)

Der Backslash (\) macht die Sonderbedeutung des nachfolgenden Zeichens unwirksam. Das Kommando echo \* erzeugt zum Beispiel die Ausgabe *.

Hochkomma (')

Will man eine Zeichenkettevor einer Interpretation durch die Unix-Shell schützen, so ist ist diese am Beginn und Ende durch ein Hochkomma zu kennzeichnen.

Anführungszeichen(")

Das Anführungszeichen läßt im Gegensatz zum Hochkomma die Ersetzungen von Shell-Variablen und die Interpretation des Backslash-Konstruktes zu, verbietet aber die Interpretation von Dateinamen-Kurzschreibweisen (*, ? ... ).