Website-Suche

Nützliche Bash-Befehlszeilen-Tipps und -Tricks, Beispiele - Teil 2


In dieser Serie untersuchen wir verschiedene Tipps, Tricks und Bash-Befehlszeilenbeispiele, die Ihnen helfen werden, ein fortgeschrittener Bash-Benutzer und Programmierer zu werden. Bash bietet eine umfangreiche Skript- und Programmiersprache, die die Macht wieder in die Hände des Benutzers und Entwicklers legt. Bash ermöglicht es Ihnen auch, im Laufe der Zeit zu lernen, was es zu einer angenehmeren Erfahrung macht. Den ersten Artikel unserer Serie finden Sie in unserem Artikel Nützliche Bash-Befehlszeilen-Tipps und -Tricks Beispiele Teil 1.

In dieser Tutorial-Reihe lernen Sie:

  • Nützliche Tipps, Tricks und Methoden zur Bash-Befehlszeile
  • So interagieren Sie mit der Bash-Befehlszeile auf fortgeschrittene Weise
  • Wie du deine Bash-Fähigkeiten insgesamt schärfst und ein kompetenterer Bash-Benutzer wirst

Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 2

Verwendete Softwareanforderungen und Konventionen

Beispiel 1: Abfangen dieser illusorischen IP-Adresse

Manchmal müssen unsere Skripte wissen, welche IP-Adresse unser Computer ist. Es gibt ein paar verschiedene Methoden, aber keine davon ist völlig narrensicher. Wenn Sie z. B. mehrere Netzwerkadapter in einem Computer haben, können Änderungen in der Ausgabe durch verschiedene Befehle vorgenommen werden. Außerdem haben einige Befehle Einschränkungen.

Zum Beispiel gibt der Befehl hostname in seinem Handbuch (für die Option -I) eindeutig an, dass er alle Netzwerkadressen des Hosts anzeigen wird, aber keine Annahmen über die Reihenfolge der Ausgabe treffen soll. Es scheint daher, dass die Verwendung des Hostnamens nicht die beste Option ist.

Die hier bereitgestellten Beispiele sollen Ihnen helfen und einige Vorschläge für weitere Erkundungen und umgebungsspezifische und/oder allgemeine Verbesserungen geben. Die Kenntnis des abgefragten Rechners oder des verwendeten Netzwerks ermöglicht es einem, diese Befehle in stabilere IP-Adressen-Retriever-Skripte umzuwandeln.

MYIP="$(ip a | grep 'inet.*global' | grep -v docker | sed 's|.*inet ||' | grep -o "^[\.0-9]\+")"; echo "${MYIP}"
10.10.0.20
MYIP="$(ip -s route get 1 | grep -o "src [\.0-9]\+" | grep -o "[\.0-9]\+")"; echo "${MYIP}"
10.10.0.20

Im ersten Befehl haben wir den Befehl ip a (IP-Adresse) verwendet, um eine Liste aller IP-Adressen abzurufen, die diesem Computer zugewiesen sind. Sie können den Befehl ip a direkt in der Bash-Befehlszeile eingeben, um zu sehen, wie die Ausgabe aussieht.

Als nächstes haben wir alle globalen Inet-Adapter grepped und alle Docker-Netzwerkverbindungen aus der Liste entfernt (Sie können sehen, dass dies nicht perfekt ist; andere Software kann andere Netzwerkschnittstellen erstellen, zum Beispiel ssh oder andere Virtualisierungsprogramme wie Virtualbox, die ebenfalls gefiltert werden müssen).

Anschließend verarbeiten wir die Eingabe mit sed weiter, um die Informationen bis zu inet zu entfernen. Schließlich suchen wir nur mit einem grep-Befehl nach der tatsächlichen IP-Adresse, dh grep -o, der einen regulären Ausdruck verwendet, um die vollständige (IPv4) IP-Adresse abzurufen.

Weitere Informationen zu regulären Ausdrücken finden Sie in unseren Artikeln Bash-Regexps für Anfänger mit Beispielen und Bash-Regex für Fortgeschrittene mit Beispielen.

Man merkt auch wieder an, wie es hier Einschränkungen gibt; wie man IPv6-IP-Adressen einbindet, wie man herausfindet, was die Haupt-IP-Adresse ist, wenn es mehrere Adapter gibt usw.

Im zweiten Befehl suchen wir mit ip -s route get 1 nach der ersten Route auf dem Computer und verarbeiten dann die Ausgabe auf ähnliche Weise. Dies ist möglicherweise stabiler, um zumindest die Haupt-IPv4-Adresse des Computers zu finden.

Teilen Sie uns in den Kommentaren unten mit, wie Sie die IP und vielleicht die primäre IPv4-Adresse mithilfe von Bash-Skripting am besten abrufen können!

Beispiel 2: Die Risiken von Globbing und die Notwendigkeit, korrekt zu zitieren

touch a b c
echo "$(echo "*")"
*
echo $(echo "*")
a b c

In diesem Beispiel erstellen wir zuerst 3 Dateien, a, b und c, und als nächstes führen wir zwei Echos aus. Das erste Echo zitiert das * korrekt, das sich aus dem Echo "*" in der Subshell $() ergibt, was dazu führt, dass ein Literal * vom ersten Echo im Befehl ausgegeben wird. Der zweite echo-Befehl zitiert das * nicht korrekt und daher findet Bash-Globbing statt; Das * wird als Dateinamensbezeichner angesehen, und die Dateien werden aufgelistet und an das erste Echo übergeben. Um dies zu verdeutlichen, betrachten Sie:

echo *
a b c

Wir sehen daher die Notwendigkeit, jeden Text, der als Dateiname interpretiert werden kann, immer korrekt zu zitieren, auch wenn ein solcher Text bereits korrekt in der Subshell zitiert wird, wie es hier der Fall ist ($ (echo "*"): beachten Sie das zitierte *).

Schlussfolgerung

In diesem Artikel haben wir uns angesehen, wie Sie mit verschiedenen Methoden eine IP-Adresse erhalten können, und überlegt, diese auf verschiedene Umgebungen auszuweiten. Wir haben auch das Bash-Globbing und die Notwendigkeit untersucht, Texte, die als Dateinamen interpretiert werden können, korrekt zu zitieren, um Globbing zu vermeiden.

  • Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 1
  • Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 2
  • Nützliche Bash-Befehlszeilen-Tipps und -Tricks Beispiele – Teil 3
  • Nützliche Bash-Befehlszeilen-Tipps und Tricks, Beispiele – Teil 4
  • Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 5

Verwandte Artikel: