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:
{
befehl1
befehl2
} < datei_namePipe ed
Man kann die Ausgabe eines Programmes direkt als Ein gabe eines anderen Programmes benutzen:
cat datei_name | grep ein_muster
Reihenfolge:
- zuerst wird cat ausgeführt und liest den Inhalt der Datei aus
- dann wird grep ausgeführt, und filtert den Inhalt
if ed
Struktur ed
if trifft eine Entscheidung anhand der Rückgabewertes eines Befehles.
if true
then
echo hallo
fitrue 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
fiBedingungen 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):
- int -lt int ("<")
- int -le int ("<=")
- int -gt int (">")
- int -ge int (">=")
- int -eq int ("==")
- int -ne int ("!=")
- string = string ("==")
- string != string ("!=")
- -e datei_name ("Datei vorhanden")
mehrere Fallunterscheidungen ed
case variablen_name in
muster1) befehl1 ;;
muster2) befehl2 ;;
muster3) befehl3 ;;
esacHierbei 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
doneMan 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- aaa ist eine Variable
- *.txt wird substituiert durch a.txt b.txt
- Die Schleife wird für jedes Element der Liste ausgeführt und die Variable dabei jeweils auf das Element gesetzt