Bash ist eine ziemlich leistungsfähige Sprache zum Programmieren, und es ist auch recht einfach, damit anzufangen.
Schließlich ist es fast immer die Shell, die Sie sehen werden, wenn Sie Ihr Terminal öffnen. Das macht es äußerst nützlich, sich daran zu gewöhnen.
Es gibt einige mächtige Befehle in Bash, die Sie möglicherweise nicht kennen, selbst wenn Sie mit der Verwendung der Sprache ziemlich vertraut sind. All diese Befehle können jedoch sehr nützlichen Zwecken dienen und die Shell-Skripte, die Sie schreiben, sauberer, wartbarer und geradezu leistungsfähiger machen, als sie zuvor hätten sein können.
Lesen:Eingabe vom Benutzer erfragen
Der Lesebefehl ermöglicht es Ihnen, Eingaben von einem Benutzer entgegenzunehmen und in einer Variablen zu speichern.
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"
Dieser wartet auf Eingaben von Ihnen, dem Benutzer, und setzt dann den Wert für name
Variable auf die Zeichenfolge, die Sie eingeben.
Zum Beispiel, wenn Sie Ihren Namen als Linux Handbook
angegeben haben Beim Ausführen des obigen Skripts würde es Your name is Linux Handbook!
ausgeben .
Sie können das obige Beispiel auch kompakter gestalten, indem Sie -p
angeben Option zum read
Befehl, der die nach -p
angegebene Zeichenfolge ausgibt , und fragen Sie dann den Benutzer nach einer Eingabe:
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"
Sie werden auch bemerken, dass ich nach What is your name?
ein Leerzeichen eingefügt habe . Wenn wir es nicht hinzufügen würden, würde es buchstäblich What is your name?
ausgeben ohne Leerzeichen, wodurch es etwas seltsamer aussehen würde, wenn der Benutzer seine Eingabe eingibt:
Mapfile:Einer Variablen die Werte der Zeilen einer Datei zuweisen
Sie können das mapfile
verwenden Befehl, den Inhalt einer Datei zu lesen und diese Ausgabe dann einem Bash-Array zuzuweisen, wobei jedes Array-Element erstellt wird, wenn eine neue Zeile in der Datei gefunden wird.
Lassen Sie uns beispielsweise eine Datei mit dem Namen file.txt
erstellen das den folgenden Text enthält:
Line 1
Line 2
Line 3
Line 4
Line 5
Sie könnten diese Datei in ein Bash-Array konvertieren, indem Sie den folgenden Befehl ausführen, der den Inhalt der Datei der file_var
zuweist Variable:
#!/usr/bin/env bash
mapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
Sie werden feststellen, dass das Obige auch eine Ausgabe mit seltsamen Abständen erzeugt, die nicht mit dem Inhalt der Datei übereinstimmt, was durch Hinzufügen des -t
behoben werden kann Option zum mapfile
Befehl:
#!/usr/bin/env bash
mapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
Schließlich stellen Sie möglicherweise fest, dass Folgendes nicht funktioniert:
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var
Das liegt daran, dass die mapfile
Der Befehl auf der rechten Seite der Pipe wird in einer Subshell (oder mit anderen Worten, einer neuen Instanz von Bash) ausgeführt, die Ihre aktuelle Shell nicht beeinflussen kann.
Quelle:Setzen Sie Variablen aus einer Datei in die Umgebung Ihrer Shell
Angenommen, Sie haben die folgende imaginäre Datei config.sh
, mit folgendem Inhalt:
username=linuxhandbook
domain=linuxhandbook.com
Was ist, wenn Sie den Inhalt dieser Datei nehmen und in die Umgebung Ihrer aktuellen Shell einfügen möchten?
Das geht ganz einfach mit dem Quellbefehl:
source config.sh
Sie können dann überprüfen, ob die Variablen wie erwartet zugewiesen wurden:
Unter der Haube die source
Der Befehl führt tatsächlich die angegebene Datei in der Umgebung Ihrer aktuellen Shell aus, sodass die Eingabe von Befehlen in dieser Datei tatsächlich dazu führen würde, dass sie ausgeführt werden, wenn source
ausgeführt wird .
Lassen Sie uns beispielsweise Folgendes in config.sh
einfügen :
name="Linux Handbook"
echo "Hello ${name}!"
echo "Have a good day!"
Wenn wir dann soure config.sh
ausführen , sehen Sie, dass die beiden echo
Befehle ausgeführt werden, sowie der name
Variable wird zugewiesen:
Sie können auch .
verwenden anstelle von source
, die sich genauso verhält wie source
würde.
Abschluss
Und schon sind Sie auf dem besten Weg, mächtigere und nützlichere Aufgaben zu erledigen, während Sie gleichzeitig in Bash bleiben können.
Gibt es noch andere Befehle, die Sie häufig in Bash verwenden? Fühlen Sie sich frei, einen von ihnen in den Kommentaren unten zu hinterlassen.