[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Suche Literatur zur Shell programmierung



* hauke homburg schrieb am 18.Okt.2003:

> Ich versuche eigentlich nichts spezielles zu machen. Ich fand das O'Reilly
> Buch _ansich_ gut. Es sind noch nen paar Feinheiten womit ich nicht
> klarkomme. Es ist z.b. so, dass es immer heisst, dass ein Shellscript für die
> Bash in der ersten Zeile immer das #!/bin/sh haben sollte. Es funktioniert
> aber auch ohne. Wo? liegt nun der Unterschied? 

Den Unterschied merkst Du erst, wenn Du Dein Skript nicht von der
shell aus, sondern etwa von einem Programm aus aufrufst.

Wenn ein skript aufgerufen wird, so wird diese Zeile genommen, und
das Programm, was da steht als Interpreter genommen. Das heißt in
diesem Falle, es wird /bin/sh aufgerufen damit es das Skript
ausführt.

Fehlt diese Zeile, so führt die aufrufende Shell das Skript selber
aus. Genauer, die aufrufende Shell ruft sich selber auf, und führt
das Skript aus. Wenn Du aber nicht von der Bash aus aufrufst,
sondern etwa von einem Perlprogramm, so würde das Skript mithin als
Perltext interpretiert, was natürlich fast immer schief gehen wird.

Wenn Du das Skript mit source bzw. . aufrufst, also etwa

source skript

oder 

. skript

vorausgesetzt Dein Skript heißt skript, so ist die #! Zeile
uninteressant. Hier führt die aufrufende Bash das Skript unmitelbar
selber aus. Das heißt insbesondere, daß alle veränderungen im
Enviroment und anderen Variablen erhalten bleiben. Kann einen
Vorteil darstellen, aber meist auch einen Nachteil. Bei einem Exit
loggst Du Dich aus, falls es eine Loginshell war. Sowohl source als
auch . sind sh-spezifisch, auch wenn es z.B auch bei perl ebenfalls
source heißt, aber das kann bei jeder shell anders sein.

> Es ist so, das ich ein
> weiterverarbeiten von Variablen nur per eval Befehl erreichen kann. hab ich
> das richtig verstanden? 

Nein, das hast Du wahrscheinlich flasch verstanden. eval brauchst
Du, wenn Du in einer Zeile die Variable durch ihren Inhalt ersetzen
möchtest, und dann die Zeile, mit dem Inhalt statt der Variablen
nochmal syntaktisch neu interpretieren.

> Wo? liegt der Sinn des eval Befehls? Wenn ich das
> Buch richtig verstanden habe, dann kann ich keine Schleifen bilden wie bei C
> in denen nur Varialblen hochgezählt werden? ich _muss_ mich an Dateinamen
> halten? habe ich das richtig verstanden?

Nein, das hast Du flashc verstanden. Du kannst Schleifen hochzählen,
etwa mit expr oder auch mit einem $((...)) Konstrukt. Letzteres ist
aber bash-spezifisch, das die Bournshell nicht kennt.

> Ausserdem suche ich noch sowas wie das CPAN für Shell Scripte.

Da kann ich Dir leider auch nicht weiterhelfen.

Bernd

(TOFU entsorgt)



Reply to: