sh myscript
Im allgemeinen ist es aber praktischer, die Datei als ausführbar anzumelden (execute permission), mittels
chmod +x myscript
Das Shell-Script läßt sich dann wie ein "normales" (binäres) Kommando aufrufen:
myscript
Vorausgesetzt ist hierbei allerdings, daß das Betriebssystem das Script mit der richtigen Shell abarbeitet. Moderne Unix-Systeme prüfen zu diesem Zweck die erste Zeile. Für die sh sollte sie folgenden Inhalt haben:
#!/bin/sh
Obwohl das Doppelkreuz normalerweise einen Kommentar einleitet, der vom System nicht weiter beachtet wird, erkennt es hier, daß die "sh" (mit absoluter Pfadangabe: /bin/sh) eingesetzt werden soll.
#!/bin/sh # Einfaches Beispiel echo Hallo, Welt! echo Datum, Uhrzeit und Arbeitsverzeichnis: date pwd echo Uebergabe-Parameter: $*
Das vorstehende einfache Script enthält im wesentlichen normale Unix-Kommandos. Abgesehen von der ersten Zeile liegt die einzige Besonderheit im Platzhalter "$*", der für alle Kommandozeilen-Parameter steht.
#!/bin/sh # Variablen echo Uebergabeparameter: $* echo user ist: $USER echo shell ist: $SHELL echo Parameter 1 ist: $1 echo Prozedurname ist: $0 echo Prozessnummer ist: $$ echo Anzahl der Parameter ist: $# a=17.89 # ohne Luecken am = Zeichen echo a ist $a
if [ bedingung ] then kommandos1 else kommandos2 fi
Anmerkungen: "fi" ist ein rückwärts geschriebenes "if", es bedeutet "end if" (diese Schreibweise ist eine besondere Eigenheit der Bourne Shell). Die "bedingung" entspricht der Syntax von test, siehe auch weiter unten. Im if-Konstrukt kann der "else"-Zweig entfallen, andererseits ist eine Erweiterung durch einen oder mehrere "else if"-Zweige möglich, die hier "elif" heißen:
if [ bedingung1 ]
then kommandos1
elif [ bedingung2 ]
then kommandos2
else kommandos3
fi
#!/bin/sh # Interaktive Eingabe, if-Abfrage echo Hallo, user, alles in Ordnung? echo Ihre Antwort, n/j: read answer echo Ihre Antwort war: $answer # if [ "$answer" = "j" ] if [ "$answer" != "n" ] then echo ja else echo nein fi
case var in muster1) kommandos1 ;; muster2) kommandos2 ;; *) default-kommandos ;; esacAnmerkungen: "esac" ist ein rückwärts geschriebenes "case", es bedeutet "end case". Die einzelnen Fälle werden durch die Angabe eines Musters festgelegt, "muster)", und durch ein doppeltes Semikolon abgeschlossen. (Ein einfaches Semikolon dient als Trennzeichen für Kommandos, die auf derselben Zeile stehen.) Das Muster "*)" wirkt als "default", es deckt alle verbleibenden Fälle ab; die Verwendung des default-Zweiges ist optional.
#!/bin/sh # Interaktive Eingabe, Mehrfachentscheidung (case) echo Alles in Ordnung? echo Ihre Antwort: read answer echo Ihre Antwort war: $answer case $answer in j*|J*|y*|Y*) echo jawohl ;; n*|N*) echo nein, ueberhaupt nicht! ;; *) echo das war wohl nichts ;; esac
for i in par1 par2 par3 ... do kommandos doneAnmerkungen: Die for-Schleife in der Bourne Shell unterscheidet sich von der for-Schleife in üblichen Programmiersprachen dadurch, daß nicht automatisch eine Laufzahl erzeugt wird. Der Schleifenvariablen werden sukzessive die Parameter zugewiesen, die hinter "in" stehen. (Die Angabe "for i in $*" kann durch "for i" abgekürzt werden.)
#!/bin/sh # Schleifen: for echo Uebergabeparameter: $* # for i for i in $* do echo Hier steht: $i done
while [ bedingung ] do kommandos done
until [ bedingung ] do kommandos doneAnmerkung: Bei "while" erfolgt die Prüfung der Bedingung vor der Abarbeitung der Schleife, bei "until" erst danach. (Anstelle von "[ bedingung ]" oder "test bedingung" kann allgemein ein Kommando stehen, dessen Return-Code geprüft wird; vgl. die Ausführungen zu "if".)
#!/bin/sh # Schleifen: while # mit Erzeugung einer Laufzahl i=1 while [ $i -le 5 ] do echo $i i=`expr $i + 1` done