3. Ein erstes Skript

RSS FeedAuf Twitter teilen

Kaufen Sie dieses Shell-Skript-Tutorial als PDF für nur 5 US-Dollar Für unser erstes Shell-Skript schreiben wir einfach ein Skript mit der Aufschrift“Hallo Welt“. Wir werden dann versuchen, mehr aus einem Hello Worldprogram herauszuholen als jedes andere Tutorial, das Sie jemals gelesen haben 🙂
Create a file (first.sh) wie folgt: first.sh

#!/bin/sh# This is a comment!echo Hello World # This is a comment, too!

Die erste Zeile teilt Unix mit, dass die Datei von /bin/sh ausgeführt werden soll.Dies ist der Standardspeicherort der Bourne-Shell auf fast jedem Unix-System. Wenn Sie GNU / Linux verwenden, ist /bin/sh normalerweise ein symbolischer Link zu bash (oder neuerdings dash).

Die zweite Zeile beginnt mit einem speziellen Symbol: #. Dies markiert die Zeile als Kommentar und wird von der Shell vollständig ignoriert.
Die einzige Ausnahme ist, wenn die allererste Zeile der Dateistartet mit #! – wie bei uns. Dies ist eine spezielle Richtliniedie Unix speziell behandelt. Dies bedeutet, dass selbst wenn Sie csh, ksh oder etwas anderes als interaktive Shell verwenden, das, was folgt, von der Bourne-Shell interpretiert werden sollte.
In ähnlicher Weise kann ein Perl-Skript mit der Zeile #!/usr/bin/perl beginnen, um Ihrer interaktiven Shell mitzuteilen, dass das folgende Programm von perl ausgeführt werden soll. Für die Bourne-Shell-Programmierung bleiben wir bei #!/bin/sh.

In der dritten Zeile wird ein Befehl ausgeführt: echo mit zwei Parametern oder Argumenten – der erste ist "Hello"; der zweite ist "World".
Beachten Sie, dass echo automatisch ein einzelnes Leerzeichen zwischen seine Parameter setzt.
Das # -Symbol markiert immer noch einen Kommentar; das # und alles, was darauf folgt, wird von der Shell ignoriert.

Führen Sie nun chmod 755 first.sh aus, um die Textdatei ausführbar zu machen,und führen Sie ./first.sh aus.
Ihr Bildschirm sollte dann so aussehen:

$ chmod 755 first.sh
$ ./first.sh
Hello World
$

Das haben Sie wahrscheinlich erwartet! Sie könnten sogar einfach ausführen:

$ echo Hello World
Hello World
$

Jetzt nehmen wir ein paar Änderungen vor.
Beachten Sie zunächst, dass echo zwischen seinen Parametern EIN Leerzeichen setzt. Setzen Sie ein paar Leerzeichen zwischen „Hallo“ und „Welt“. Was erwarten Sie von der Ausgabe? Was ist mit einem Tabulatorzeichen zwischen ihnen?
Wie immer mit Shell-Programmierung, versuchen Sie es und sehen.
Der Ausgang ist genau das gleiche! Wir rufen das Programm echo mit zwei Argumenten auf; es kümmert sich nicht mehr als cp über die Lücken zwischen ihnen.Ändern Sie nun den Code erneut:

#!/bin/sh
# This is a comment!
echo "Hello World" # This is a comment, too!

Diesmal funktioniert es. Das haben Sie wahrscheinlich auch erwartet, wenn Sie Erfahrung mit anderen Programmiersprachen haben. Aber der Schlüssel zum Verständnis dessen, was mit komplexeren Befehls- und Shell-Skripten vor sich geht, besteht darin, zu verstehen und erklären zu können: WARUM?
echo wurde nun mit nur EINEM Argument aufgerufen – dem String“Hello World“. Es druckt dies genau aus.
Der Punkt, der hier zu verstehen ist, ist, dass die Shell die Argumente analysiert, BEVOR sie sie an das aufgerufene Programm übergibt. In diesem Fall werden die Anführungszeichen entfernt, die Zeichenfolge jedoch als ein Argument übergeben.
Als letztes Beispiel geben Sie das folgende Skript ein. Versuchen Sie, das Ergebnis vorherzusagen, bevor Sie es ausführen:

first2.sh

#!/bin/sh
# This is a comment!
echo "Hello World" # This is a comment, too!
echo "Hello World"
echo "Hello * World"
echo Hello * World
echo Hello World
echo "Hello" World
echo Hello " " World
echo "Hello "*" World"
echo `hello` world
echo 'hello' world

Ist alles wie erwartet? Wenn nicht, keine Sorge! Dies sind nur einige der Dinge, die wir in diesem Tutorial behandeln werden… und ja, wir werden leistungsfähigere Befehle verwenden als echo!

RSS FeedAuf Twitter teilen
Zurück: Philosophie Weiter: Variablen (Teil 1)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.