Shell Scripte ed

Grundlagen ed

Script Datei ed

alle Befehle können direkt in der Shell eingegeben werden, oder in einer Datei, die mit etwas in der Art beginnt:

#! /bin/sh

Kommentare ed

beginnen mit Raute:

# Kommentar...

Dateinamen-Substitution ed

Die Shell ersetzt Dateinamen-Muster automatisch durch die Liste der passenden Dateinamen (mit Leerzeichen getrennt und vor dem Ausführen):

echo *.txt

wenn es eine a.txt und b.txt gibt, wird daraus:

echo a.txt b.txt

und es wird ausgegeben:

a.txt b.txt

Zeichenketten ed

...Hochkommas...

Variablen ed

...sind Strings

Werte in Variablen speichern:

a=hallo
a="hallo"
a='hallo'

Werte auslesen:

echo $a

dabei substituiert die Shell die Variable durch den Inhalt, beim ausführen wird daraus

echo "hallo"

Dateien ed

Die Ein- und Ausgabe von Befehlen kann in Dateien umgeleitet werde

Ausgabe ed

Datei mit der Ausgabe überschreiben:

echo hallo > datei_name

an Datei anhängen:

echo hallo >> datei_name

Auch Fehlermeldungen können in Dateien umgeleitet werde:

rm dsfkjsdf 2> datei_name

Eingabe ed

Text statt über die übliche Tastatureingabe aus einer Datei ins Programm eingeben:

befehl < datei_name

Achtung:
wenn mehrere Befehle nacheinander aus einer Datei lesen sollen, muss man
{
    befehl1
    befehl2
} < datei_name
benutzen, da ansonsten die Datei bei jedem Befehl neu geöffnet wird und somit wieder von vorne gelesen wird!

Pipe ed

Man kann die Ausgabe eines Programmes direkt als Ein gabe eines anderen Programmes benutzen:

cat datei_name | grep ein_muster

Reihenfolge:

if ed

Struktur ed

if trifft eine Entscheidung anhand der Rückgabewertes eines Befehles.

if true
then
    echo hallo
fi

true ist ein Befehl, der einfach nur den Rückgabewert 0 ("wahr") produziert. Entsprechend gibt es false.

oder einzeilig:

if true; then echo hallo; fi

oder verzweigt:

if false
then
    echo Ja
else
    echo Nein
fi

Bedingungen ed

Zahl-Vergleiche können über eckige Klammern formuliert werden (Leerzeichen sind hier wichtig!):

if [ 4 -lt 5 ]    # "if ( 4 < 5 )"

Diese Zeile ist die Abkürzung für den Befehl test:

if test 4 -lt 5

Es gibt mehrere Test-Operationen (siehe man test):

mehrere Fallunterscheidungen ed

case variablen_name in
    muster1) befehl1 ;;
    muster2) befehl2 ;;
    muster3) befehl3 ;;
esac

Hierbei werden alle Muster durchgegangen und beim ersten passenden der zugehörige Befehl ausgeführt.

Um zu erzwingen, dass auch wirklich ein Befehl ausgeführt wird, sollte ein default-Muster angegeben werden:

    *) default_befehl ;;

Schleifen ed

while ed

Schleifen-Bedingungen werden genau wie die if-Bedingungen formuliert

while Bedingung
do
    echo hallo
done

Man kann eine Schleife vorzeitig mit dem Befehl break beenden. Außerdem kann man mit continue wieder zur Schleifenbedingung springen.

for ed

alle Elemente aus einer Liste durchgehen

z.B. Dateien:

for aaa in *.txt
do
    echo $aaa
done

Integer-Operationen ed