Shellskripte C-Shell (CSH)
Unter Unix / Linux-Systemen werden gerne Shellskripte verwendet um alltägliche Arbeiten zu erledigen. Dabei wird eine Datei von einem Interpreter ausgewertet und ausgeführt (als Pendant kann man Batchfiles oder den Windows Sripting-Host sehen).
Hier stelle ich die C-Shell vor, welche auf jedem Unix System zu finden ist.
Um eine Datei als C-Shellskript zu identifozieren, muss zu beginn folgende Zeile eingefügt werden
#!/bin/csh
Variablen werden mit set varname oder mit set varname = wert gesetzt.
Der Zugriff auf Variablen erfolgt durch a = ~meier.
Soll auf Variable a mit einer Eingabe initialisiert werden, so ist folgendes zu schreiben set a=$c'
Für die Arbeit mit Umgebungsvariablen stehen die Befehle setenv varname bzw. unsetenv varname zur Verfügung.
Wird eine Variable ausgelesen und ausgegeben so geschieht dies mit $varname
Bezugname auf Kommandozeilenargumente
$0....$9
$0 ist der Kommandoname
weitere Argumente müssen dann nach links geshiftet werden: shift
$0 bleibt aber $2 wird zu $1,....
alternative Schreibweise:
$argv[1] 1. Parameter
$#argv Anzahl der Parameter, bei 0 nur Kommandoname
Ein kleines Beispiel
Hier wird ein einfacher Taschenrechner vorgestellt, der mit Hilfe der CSH realisiert wurde, dieser kann "nur" Multiplizieren. Es ist die Lösung des zweiten Belegs aus dem Fach Betriebssysteme 1 der HTWK
#!/bin/csh
set eingabe set count=$#argv set result=1 set backup set test
if ($#argv > 0) then while ($count>0) @ count -- @ test = $1 * $result if ($test>$result) then @ result = $1 * $result else echo "Fehler" exit 1 endif shift end
echo "Ergebnis" echo $result else while(1) echo "Bitte Eingeben" set input=$< switch("$input") case [?]: echo "Zwischenergebnis:" echo $result breaksw case [x]: @ result = $backup echo $result breaksw case [=]: echo "Ergebnis:" echo $result exit 0 breaksw case n: @ backup = $result @ result = 1 breaksw default: @ test = $result * $input if ( $test>$result ) then @ backup = $result @ result = $input * $result echo $result else echo "Fehler" exit 1 endif breaksw endsw end
endif
end
|