Willkommen zum zweiten Teil der Beginner Guide To BASH-Serie, die insofern einzigartig ist, als sie das einzige BASH-Tutorial ist, das von einem Anfänger für Anfänger geschrieben wurde.
Die Leser dieses Leitfadens werden ihr Wissen aufbauen, während ich mein Wissen aufbaue, und am Ende werden wir hoffentlich einige ziemlich clevere Skripte schreiben können.
Letzte Woche habe ich über das Erstellen Ihres ersten Skripts berichtet, das einfach die Wörter "Hello World" enthielt. Es behandelt Themen wie Texteditoren, wie Sie ein Terminalfenster öffnen, wo Sie Ihre Skripte ablegen können, wie die Wörter "Hello World" angezeigt werden, und einige Feinheiten für Fluchtzeichen wie Anführungszeichen ("").
Diese Woche werde ich die Eingabeparameter behandeln. Es gibt andere Leitfäden, die diese Art von Dingen beibringen, aber ich finde, dass sie sich auf etwas relativ niedriges Niveau stürzen und möglicherweise zu viele Informationen liefern.
Was ist ein Parameter?
Im "Hello World" -Skript aus dem letzten Tutorial war alles sehr statisch. Das Skript hat nicht wirklich viel getan.
Wie können wir das Skript "Hello World" verbessern?
Was ist mit einem Skript, das die Person begrüßt, die es ausführt? Anstelle von "Hello World" wird "Hello Gary", "Hello Tim" oder "Hello Dolly" angezeigt.
Ohne die Möglichkeit, Eingabeparameter zu akzeptieren, müssten wir drei Skripte "hellogary.sh", "hellotim.sh" und "hellodolly.sh" schreiben.
Indem wir zulassen, dass unser Skript Eingabeparameter liest, können wir ein Skript verwenden, um jeden zu begrüßen.
Öffnen Sie dazu ein Terminalfenster (STRG + ALT + T) und navigieren Sie zu Ihrem Skriptordner, indem Sie Folgendes eingeben: (about cd command)
CD-Skripte
Erstellen Sie ein neues Skript mit dem Namen greetme.sh, indem Sie Folgendes eingeben: (about touch-Befehl)
berühren Sie greetme.sh
Öffnen Sie das Skript in Ihrem bevorzugten Editor, indem Sie Folgendes eingeben: (zum Befehl nano)
nano greetme.sh
Geben Sie den folgenden Text innerhalb von Nano ein:
#! / bin / bash echo "hallo $ @"
Drücken Sie STRG und O, um die Datei zu speichern, und anschließend STRG und X, um die Datei zu schließen.
Um das Skript auszuführen, geben Sie Folgendes in die Befehlszeile ein und ersetzen Sie dabei Ihren Namen.
sh greetme.sh
Wenn ich das Skript mit meinem Namen starte, werden die Wörter "Hallo Gary" angezeigt.
Die erste Zeile enthält die #! / Bin / bash-Zeile, mit der die Datei als Bash-Skript identifiziert wird.
Die zweite Zeile verwendet die Echo-Anweisung, um das Wort hallo zu wiederholen, und dann gibt es die seltsame $ @ -Notation. (über Echo-Befehl)
Das $ @ wird erweitert, um alle Parameter anzuzeigen, die zusammen mit dem Skriptnamen eingegeben wurden. Wenn Sie also "sh greetme.sh tim" eingeben, werden die Wörter "Hallo Tim" angezeigt. Wenn Sie "greetme.sh tim smith" eingegeben haben, werden die Wörter "hallo tim smith" angezeigt.
Für das greetme.sh-Skript kann es gut sein, nur mit dem Vornamen Hallo zu sagen. Niemand sagt "Hallo Gary Newell", wenn sie mich treffen, aber vielleicht "Hallo Gary".
Ändern wir das Skript so, dass es nur den ersten Parameter verwendet. Öffnen Sie das greetme.sh-Skript in nano, indem Sie Folgendes eingeben:
nano greetme.sh
Ändern Sie das Skript so, dass es wie folgt lautet:
#! / bin / bash echo "hallo $ 1"
Speichern Sie das Skript, indem Sie STRG und O drücken, und beenden Sie es, indem Sie STRG und X drücken.
Führen Sie das Skript wie unten gezeigt aus (ersetzen Sie meinen Namen durch Ihren):
sh greetme.sh gary newell
Wenn Sie das Skript ausführen, sagt es einfach "Hallo Gary" (oder hoffentlich "Hallo" und wie auch immer Ihr Name lautet).
Die 1 nach dem $ -Symbol sagt im Wesentlichen zum Echo-Befehl den ersten Parameter aus. Wenn Sie die $ 1 durch eine $ 2 ersetzen, wird "Hallo Newell" (oder wie auch immer Ihr Nachname ist) angezeigt.
Wenn Sie übrigens den $ 2 durch einen $ 3 ersetzt und das Skript mit nur 2 Parametern ausgeführt haben, würde die Ausgabe einfach "Hallo" sein.
Es ist möglich, die Anzahl der tatsächlich eingegebenen Parameter anzuzeigen und zu bearbeiten. In späteren Lernprogrammen werde ich zeigen, wie die Parameteranzahl für Validierungszwecke verwendet wird.
Um die Anzahl der eingegebenen Parameter anzuzeigen, öffnen Sie das greetme.sh-Skript (nano greetme.sh) und ändern Sie den Text wie folgt:
#! / bin / bash echo "Sie haben $ # Namen eingegeben" echo "hallo $ @"
Drücken Sie STRG und O, um das Skript zu speichern, und STRG und X, um Nano zu beenden.
Das $ # in der 2. Zeile zeigt die Anzahl der eingegebenen Parameter an.
Bisher war das alles neu, aber nicht sehr nützlich. Wer braucht ein Skript, das einfach "Hallo" anzeigt?
Die eigentliche Verwendung von Echo-Anweisungen besteht darin, dem Benutzer eine ausführliche und sinnvolle Ausgabe bereitzustellen. Wenn Sie sich vorstellen können, dass Sie etwas Kompliziertes tun möchten, was ein ernsthaftes Zahlen-Crunching und Datei- / Ordner-Manipulation erfordert, wäre es nützlich, dem Benutzer anzuzeigen, was in jedem Schritt des Vorgangs passiert.
Im Gegensatz dazu machen Eingabeparameter Ihr Skript interaktiv. Ohne Eingabeparameter würden Sie Dutzende von Skripts benötigen, die alle sehr ähnliche Dinge ausführen, jedoch mit etwas anderen Namen.
In Anbetracht dessen gibt es einige andere nützliche Eingabeparameter, die zu wissen eine gute Idee ist, und ich werde sie alle in einen Code-Snippet aufnehmen.
Öffnen Sie Ihr greetme.sh-Skript und ändern Sie es wie folgt:
#! / bin / bash echo "Dateiname: $ 0" echo "Prozess-ID: $$" echo "---------------------------- --- "echo" Sie haben $ # Namen eingegeben "echo" hallo $ @ "
Drücken Sie STRG und O, um die Datei zu speichern, und STRG und X, um den Vorgang zu beenden.
Führen Sie nun das Skript aus (ersetzen Sie es mit Ihrem Namen).
sh greetme.sh
Dieses Mal zeigt das Skript Folgendes an:
Dateiname: greetme.sh Prozess-ID: 18595 ------------------------------ Sie haben zwei Namen eingegeben: hallo gary newell
Die $ 0 in der ersten Zeile des Skripts zeigt den Namen des Skripts an, das Sie ausführen.Beachten Sie, dass es sich um null und nicht um null handelt.
Das $$ in der zweiten Zeile zeigt die Prozess-ID des Skripts an, das Sie ausführen. Warum ist das nützlich? Wenn Sie ein Skript im Vordergrund ausführen, können Sie es abbrechen, indem Sie einfach STRG und C drücken. Wenn Sie das Skript im Hintergrund ausführen, wird es wiederholt und wiederholt und wiederholt dasselbe, oder Ihr System wird beschädigt es zu töten
Um ein im Hintergrund ausgeführtes Skript zu beenden, benötigen Sie die Prozess-ID des Skripts. Wäre es nicht gut, wenn das Skript die Prozess-ID als Teil seiner Ausgabe angibt. (über ps und kill befehle)
Bevor ich mit diesem Thema fertig bin, wollte ich noch besprechen, wohin die Ausgabe geht. Jedes Mal, wenn das Skript ausgeführt wurde, wurde die Ausgabe auf dem Bildschirm angezeigt.
Es ist durchaus üblich, dass die Skriptausgabe in eine Ausgabedatei geschrieben wird. Führen Sie dazu Ihr Skript wie folgt aus:
sh greetme.sh gary> greetme.log
Das Symbol> im obigen Befehl gibt den Text "hallo gary" in eine Datei namens greetme.log aus.
Jedes Mal, wenn Sie das Skript mit dem Symbol> ausführen, überschreibt es den Inhalt der Ausgabedatei. Wenn Sie es vorziehen, an die Datei anzuhängen, ersetzen Sie das> durch >>.
Zusammenfassung
Sie sollten jetzt in der Lage sein, Text auf den Bildschirm zu schreiben und Eingabeparameter zu akzeptieren.