GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Scripting(III)

Dies ist der dritte Artikel einer Serie, die sich auf Gnu Bash-Skripting konzentriert. Im ersten Artikel haben wir gerade ein einfaches Skript mit Befehlen nacheinander erstellt. Wir haben auch die Verwendung einiger Variablen gesehen.
Der zweite Artikel behandelte einige Bash-Kontrollstrukturen. Dieser behandelt Umleitungen, Pipes und Befehlsersetzungen.

Die gute alte Zeit

Am Anfang stand ein Prinzip:Ein Tool sollte eine Sache machen und es gut machen. Es war Sache des Benutzers, diese Tools zu kombinieren, um die gewünschten Ergebnisse zu erzielen.

Jetzt machen wir (geben Sie es zu:Auch Sie könnten sich ohne GUI manchmal verloren fühlen) (fast) alles mit einer Maus. Aber die Befehlszeile ist immer noch da und manchmal ist es einfacher, einige Befehle oder ein Skript zu schreiben, als auf jedes Element auf dem Bildschirm zu klicken.

Weiterleitung

Wir können die Eingabe oder die Ausgabe eines Befehls umleiten, bevor er ausgeführt wird. Wir können diese Umleitung verwenden, um die Ausgabe eines Befehls in einer Datei zu speichern. Oder wir können die Eingabeumleitung verwenden, um einige Daten aus einer Datei zu lesen.

Wenn wir beispielsweise den aktuellen Status (also ls -l) eines Ordners in einer Textdatei speichern möchten, um die Änderungen später zu vergleichen, verwenden wir die > Operator wie folgt:

ls -l > status.txt

Dadurch wird die Standardausgabe von ls -l umgeleitet in eine Datei namens status.txt. Falls status.txt bereits existiert, wird diese überschrieben. Um die Standardausgabe an eine vorhandene Datei anzuhängen, verwenden Sie die Datei >> Betreiber.

Um die Standardeingabe auf einen Befehl umzuleiten, verwenden Sie < Operator. Zum Beispiel:

mysql somedb < file.sql

Um Standardfehler auf eine Datei umzuleiten, fügen Sie den Dateideskriptor 2 (Dateideskriptor 1 ist die Standardausgabe (stdout), 0 ist für die Eingabe (stdin)) zur Umleitung hinzu:

Befehl 2> Datei

Achten Sie darauf, dass zwischen der Dateideskriptornummer und dem Operator kein Leerzeichen steht. Wenn zwischen ihnen ein Leerzeichen war, wird diese „2“ zu einem Parameter. Zum Beispiel:

Der erste Befehl ist „ls (Datei) etwas “ und leiten Sie die Fehlerausgabe auf status.txt um. Im zweiten Befehl sehen wir den Fehler unseres ersten Befehls:Datei mit dem Namen etwas wurde nicht gefunden.

Der dritte Befehl ist ls files something und 2 (keine davon existiert) und leitet die Standardausgabe auf status.txt um. Fehler (Datei nicht gefunden) werden auf dem Bildschirm ausgegeben und im vierten Befehl sehen wir, dass status.txt leer gelassen wurde, weil es keine Dateien mit dem Namen „2“ oder „etwas“ gibt.

Wir können Umleitungen kombinieren, wie send stdout und stderr an eine Datei, aber die Reihenfolge der Umleitungen ist wichtig. Zum Beispiel:

Aus dem Bash-Handbuch:Die ersten Befehle leiten nur die Standardausgabe in die Datei combinated.txt weiter, da der Standardfehler von der Standardausgabe dupliziert wurde, bevor die Standardausgabe in die combinierte.txt umgeleitet wurde

Beim zweiten Befehl wurde die Standardausgabe auf die Datei combinated.txt umgeleitet und dann wurde der Standardfehler auf stdout.

umgeleitet

Rohre

Aus dem Bash-Handbuch:Eine Pipeline ist eine Folge von einem oder mehreren Befehlen, die durch einen der Kontrolloperatoren | getrennt sind oder |& .

Der erste Operator verbindet die Standardausgabe des ersten Befehls mit der Standardeingabe des zweiten. Zum Beispiel, wenn ich mich nicht erinnere dass ich Platzhalter im ls-Befehl verwenden kann und jedes Shell-Skript im aktuellen Ordner auflisten möchte, kann ich ein ls ausführen und filtern Sie die Ausgabe mit grep :

Perl-Leute haben ein Motto:«Es gibt mehr als einen Weg, es zu tun ». Ich persönlich denke, dass es (fast) überall gelten sollte.

Der zweite Operator verbindet den Standardfehler des ersten Befehls mit der Standardeingabe des zweiten. Ich verwende zum Beispiel den Befehl tr (das Zeichen übersetzt) ​​um Fehlermeldungen zu simulieren:

Ich habe auch die Shell-Variable LANG gesetzt, um die Ausgabe von Spanisch auf Englisch zu ändern.

Befehlsersetzung

Mit der Befehlsersetzung können wir einen Befehl in unserem Skript ausführen und die Ausgabe dieses Befehls verwenden. Es ist einfacher zu verstehen, wie es mit einem Beispiel funktioniert. Der Befehl seq wird verwendet, um eine Zahlenfolge zu erzeugen:

Beispielsweise können wir diese Ausgabe verwenden, um Ordner mit sequenziellen Namen mit Befehlsersetzung zu erstellen. Wir können `command` verwenden oder $(command) .

In diesem Beispiel weisen wir die Ausgabe von seq 1 5 zu in die Variable i , und verwenden Sie es in einer for-Schleife.

Bleib dran

Bisher haben wir genug, um den Computer (einen Großteil) der Arbeit für uns erledigen zu lassen. Es liegt an Ihnen, diese kleinen Tools zu untersuchen, die eine Aufgabe erledigen, aber sie sehr gut machen, und sie über Skripte oder in die Befehlszeile zu integrieren.

Für den letzten Artikel dieser Serie werde ich mich auf den Dialog konzentrieren Programm zum Erstellen einer GUI (eigentlich einer TUI), um unseren Skripten Interaktivität hinzuzufügen.


Linux
  1. Bash-Trap-Befehl erklärt

  2. Bash-Wartebefehl

  3. Bash-Scripting(I)

  4. Verwenden des Linux-Basisnamenbefehls in Bash-Skripten

  5. Bash-Exportbefehl

Bash-printf-Befehl

Bash-Skripting – Bedingte Anweisungen

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

So verwenden Sie den Datumsbefehl in Bash-Skripten unter Linux

Bash-Skripting (II)

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten