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