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 |
z.B.: wc * |
| |
Pipe - lenkt die Ausgabe eines Kommandos zur Eingabe eines
|
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 (*, ? ... ).