Was sind Bash-Wörterbücher unter Linux und wie werden sie verwendet?

0
143
fatmawati achmad zaenuri/Shutterstock.com

Bash-Wörterbücher bieten Ihnen Hash-Maps und assoziative Arrays in Linux-Shell-Skripten. Wir zeigen Ihnen, wie Sie diese leistungsstarken und nützlichen Datenstrukturen in Ihren eigenen Linux-Shell-Skripten verwenden können.

A Rose by Any Other Name

RELATEDWas ist die Bash-Shell und warum ist sie für Linux so wichtig? Der formale Name für Wörterbücher ist assoziative Arrays. Sie werden auch als Hash-Tabellen und Hash-Maps bezeichnet. Sie sind eine Datenstruktur, die ähnlich wie ein normales Array funktioniert, jedoch mit einem signifikanten Unterschied.

Ein Array ist eine Sammlung von Datenwerten, die in einer Datenstruktur gespeichert sind. Um auf einen der Datenwerte zuzugreifen, die als Array-Elemente bekannt sind, müssen Sie deren Position im Array kennen. Die Position eines Array-Elements im Array wird als Index bezeichnet, daher werden diese Array-Typen als indizierte Arrays bezeichnet. Sie sind der am häufigsten verwendete Array-Typ.

Sie haben jedoch einen Nachteil. Wie greifen Sie auf ein Array-Element zu, wenn Sie seine Position innerhalb der Liste nicht kennen? Sie müssen alle Elemente im Array durchgehen und testen, ob der Wert an dieser Stelle der ist, den Sie suchen.

Assoziative Arrays lösen dieses Problem. Sie verwenden keine ganzen Zahlen, um Array-Elemente eindeutig zu identifizieren. Sie verwenden eindeutige Wörter, die als Schlüsselwörter bekannt sind. Sie können den Wert für ein Array-Element mithilfe seines Schlüsselworts abrufen, unabhängig davon, wo es innerhalb des Arrays positioniert ist. Bei einem indizierten Array sind die ganzen Zahlen, die die Positionen innerhalb des Arrays darstellen, in aufsteigender Reihenfolge. Die Schlüsselwörter in einem assoziativen Array können in beliebiger Reihenfolge sein.

Sie können einen Wert in einem assoziativen Array nachschlagen, indem Sie mit seinem Schlüsselwort suchen. Das Nachschlagen eines Wortes und das Abrufen seines zugehörigen Wertes imitiert das Nachschlagen eines Wortes in einem Wörterbuch und das Finden seiner Bedeutung. Aus diesem Grund werden assoziative Arrays als Wörterbücher bezeichnet.

Bash 4.0 oder höher

Assoziative Arrays werden in der Bash-Shell unterstützt Version 4.0 oder höher. Wenn Sie eine aktuelle Linux-Distribution verwenden, sollte alles in Ordnung sein. Um Ihre Bash-Version zu überprüfen, verwenden Sie diesen Befehl:

bash –version

Werbung

Auf dem Computer, auf dem dieser Artikel recherchiert wurde, ist Bash 5.1.4 installiert, also können wir loslegen.

Grundprinzipien

So erstellen Sie ein assoziatives Array in der Terminal-Befehlszeile oder in einem Skript verwenden wir den Bash-Befehl deklarieren. Die Option -A (assoziativ) teilt Bash mit, dass dies ein assoziatives Array und kein indiziertes Array ist.

Deklarieren Sie -A Akronyme

Dadurch wird ein assoziatives Array namens “Akronyme erstellt.”

Um einige Daten in unser Array einzufügen, müssen wir Schlüsselwörter und Werte bereitstellen. Wir können dies mit diesem Format tun:

array-name[key]=Value

Lass uns einige Array-Elemente hinzufügen:

acronyms[ACK]=Acknowledgement acronyms[BGP]=”Border Gateway Protocol” Akronyme[CIDR]=”Classless Inter-Domain Routing” Akronyme[DHCP]=”Dynamic Host Configuration Protocol” Akronyme[EOF]=”End of Frame”

Diese Befehle definieren fünf Array-Elemente. Beachten Sie, dass die Werte in Anführungszeichen eingeschlossen sind, wenn der Wert Leerzeichen enthält. Unsere Schlüsselwörter wurden in alphabetischer Reihenfolge eingegeben, können jedoch in beliebiger Reihenfolge eingegeben werden. Die Schlüsselwörter müssen eindeutig sein. Wenn Sie versuchen, zwei Einträge mit demselben Schlüsselwort zu erstellen, überschreibt der zweite eingegebene Wert den ersten. Sie haben immer noch nur einen Eintrag mit diesem Keyword, der mit dem zweiten hinzugefügten Wert verknüpft ist.

Um Werte aus dem Array abzurufen, verwenden wir Befehle in diesem Format:

${array-name[key]} Werbung

Wir können echo verwenden, um die Ausgabe an das Terminalfenster zu senden:

echo ${acronyms[ACK]} echo ${acronyms[DHCP]}

< h2 role="heading" aria-level="2">Schleifen verwenden

Arrays eignen sich sehr gut für die Verwendung in Schleifen. Assoziative Arrays sind keine Ausnahme. Schleifen bieten effiziente Möglichkeiten zum Aufrufen einer Sequenz von Aktionen ohne sich wiederholende Codeabschnitte. Bevor wir uns Schleifen ansehen, gibt es eine effiziente Möglichkeit, Arrays zu deklarieren.

Wir erstellen die Arrays mit dem Befehl deklarieren (derselben -A-Option wie zuvor), aber wir geben die Schlüsselwörter und Werte an als Liste auf der Kommandozeile.

Deklariere -A country=( [ALB]=Albanien [BHR]=Bahrain [CMR]=Kamerun [DNK]=Dänemark [EGY]=Ägypten )

Der Array-Name lautet “Länder,” und es ist mit der Werteliste durch ein Gleichheitszeichen ” =.” Die Werteliste ist in Klammern “()” und jedes Schlüsselwort wird in Klammern “[]“ eingeschlossen. Beachten Sie, dass die Werte durch keine Kommas getrennt werden. Wenn Sie eine Wertzeichenfolge haben, die Leerzeichen enthält, müssen Sie sie in Anführungszeichen setzen.

Damit ein assoziatives Array ein Schlüsselwort anstelle des Werts zurückgibt, fügen Sie ein Ausrufezeichen “!” vor dem Array-Namen. Das at-Symbol “@” kann als Platzhalter verwendet werden, dh alle Array-Elemente.

Diese for-Schleife listet alle Schlüsselwörter auf:

for key in “${!countries[@]}”; echo $key; done

Beachten Sie, dass die Schlüsselwörter nicht unbedingt in der Reihenfolge aufgeführt sind dass sie erstellt wurden, aber das spielt keine Rolle. Assoziative Arrays verlassen sich nicht auf einen geordneten Index.

Werbung

Wir können auch die Parametererweiterung verwenden, um alle Schlüsselwörter aufzulisten. Sie werden in einer Zeile aufgelistet, nicht einer pro Zeile.

echo “${!countries[@]}” echo “${!acronyms[@]}”

Wir können unsere for-Schleife erweitern, um die Schlüsselwörter und Werte gleichzeitig auszugeben.

for key in “${!acronyms[@]}”; do echo “$key – ${acronyms[$key]}”; fertig

Wenn wir wissen möchten, wie viele Elemente sich in den Arrays befinden, können wir einen Hash “#” vor dem Array-Namen anstelle eines Ausrufezeichens.

echo “${!countries[@]}” echo “${!acronyms[@]}”

Überprüfen, ob ein Array-Element vorhanden ist

Wenn Sie Wenn Sie nach einem Schlüsselwort suchen, aber kein solches Array-Element vorhanden ist, ist der Rückgabewert eine leere Zeichenfolge. Manchmal ist es nützlich, einen anderen Indikator für das Vorhandensein oder Fehlen eines Array-Elements zu haben.

Wir können das Vorhandensein eines Array-Elements mit dem “+_” Operator. Beachten Sie, dass dies nach dem Schlüsselwort und nicht vor dem Array-Namen steht, wie bei den vorherigen Operatoren, die wir gesehen haben.

if [ ${acronyms[EOF]+_} ]; dann echo “Gefunden”; else echo “Nicht gefunden”; fi if [ ${acronyms[FTP]+_} ]; dann echo “Gefunden”; else echo “Nicht gefunden”; fi

Das Array-Element mit dem Schlüsselwort “EOF” im Array gefunden wird, aber das Array-Element mit dem Schlüsselwort “FTP” ist es nicht.

Array-Elemente hinzufügen

Das Hinzufügen neuer Elemente zu einem assoziativen Array ist einfach. Im Gegensatz zu einigen Programmiersprachen müssen Sie die Größe Ihres Arrays nicht definieren, wenn Sie es deklarieren. Sie können weiterhin neue Elemente hinzufügen, ohne eine vordefinierte Obergrenze zu erreichen.

Werbung

Um dem Array ein neues Element hinzuzufügen, verwenden wir die “+=” Betreiber.

country+=( [FJI]=Fidschi ) echo “$(#countries[@]}” echo ${countries[FJI]}

Die Anzahl der Elemente im Array beträgt jetzt sechs und die Suche nach dem neuen Schlüsselwort findet das Array-Element und gibt seinen Wert zurück.

Entfernen von Array-Elementen und Arrays

Der unset-Befehl wird verwendet, um Array-Elemente zu entfernen. Wenn das Schlüsselwort Leerzeichen enthält, setzen Sie es in Anführungszeichen.

unset akronyms[EOF] if [ ${acronyms[EOF]+_} ]; dann echo “Gefunden”; else echo “Nicht gefunden”; fi

Um das gesamte Array zu entfernen, verwenden Sie unset mit dem Namen des Arrays .

nicht festgelegte Länder

Variablen mit Arrays verwenden

Die Verwendung von Variablen mit assoziativen Arrays ist unkompliziert. In diesem Beispiel setzen wir einen variablen Schlüssel auf die Zeichenfolge “EOF.” Wir verwenden die Variable, wenn wir dem Array ein neues Array-Element hinzufügen. Tatsächlich ersetzen wir das Array-Element, das wir zuvor gelöscht haben.

Wir rufen das neue Array-Element ab, indem wir es mit dem Schlüsselwort new aufrufen und auch die Variable verwenden. Wenn das Schlüsselwort Leerzeichen enthält, müssen Sie den Variablennamen in Anführungszeichen setzen.

key=EOF acronyms[$key]=”End of Frame” echo ${acronyms[EOF]} echo ${ Akronyme[$key]}

Werde kreativ

Unsere Beispiele waren Sammlungen von Informationen, bei denen jedes Array-Element unabhängig von allen anderen ist, ähnlich wie bei einem Wörterbuch. Jeder ist eine einzigartige Definition. Aber assoziative Arrays können genauso einfach eine Vielzahl von Informationen enthalten, die sich alle auf eine Sache beziehen, wie zum Beispiel die Spezifikationen verschiedener Computerhardware:

deklariere -A Spezifikation Spezifikation[CPU]=”Dual Core AMD Ryzen 5 3600″ Spezifikation[Speed]=”3600 MHz” Spezifikation[Kernel]=”5.11.0-17-generic x86_64″ Spezifikation[Mem]=”1978.5 MiB” Spezifikation[Storage]=”32 GiB” Spezifikation[Shell]=”Bash” echo ${Spezifikation[CPU]}

Effizientes Schreiben in einer Sprache bedeutet, die Mechanismen und Strukturen zu kennen, die sie bietet, und die am besten geeignete für das Problem auszuwählen, das Sie lösen möchten. Assoziative Arrays bieten Ihnen eine benutzerfreundliche Möglichkeit zum Speichern von Daten, die Sie nach Namen suchen können, genau wie in einem Wörterbuch.

WEITER LESEN

  • › Android’s “Material Sie” Theming ist großartig, aber erwarten Sie nicht, dass Samsung es verwendet
  • › So erstellen Sie eine temporäre Ansicht bei der Zusammenarbeit in Excel
  • › So überprüfen Sie die .NET Framework-Version unter Windows 10
  • › Was ist Farbtiefe?
  • › So steuern Sie alle Ihre Smart Home-Geräte in einer App