słowniki bash daje mapy hash i tablic asocjacyjnych w skryptach powłoki systemu Linux. Pokażemy Ci, jak korzystać z tych potężnych i użytecznych struktur danych we własnych skryptów powłoki systemu Linux.
Róża przez inne nazwy
Formalna nazwa dla słowników jest Tablice asocjacyjne. Są one nazywane również tabele i mapy hash hash. Są struktura danych, która działa podobnie do zwykłego tablicy, ale o znacznej różnicy.
Tablicą jest zbiorem wartości danych przechowywanych w jednej strukturze danych. Aby uzyskać dostęp do którejkolwiek z wartości danych, które są znane jako elementy tablicy, trzeba znać swoją pozycję w tablicy. Pozycja elementu tablicy w tablicy jest znany jako wskaźnik, więc tego rodzaju są znane jako macierze indeksowanych tablic. Są one najczęściej stosowanym rodzajem tablic.
Jednak oni mają wadę. Jak uzyskać dostęp do elementu tablicy jeśli nie znasz swoją pozycję na liście? Trzeba uruchomić przez wszystkie elementy w tablicy, badania, aby zobaczyć, czy wartość w tym miejscu jest ten, który szukasz.
Tablice asocjacyjne przezwyciężyć ten problem. Nie używają liczb całkowitych do jednoznacznej identyfikacji elementów tablicy. Wykorzystują one unikalne słowa znane jako słów kluczowych. Można pobrać wartość do elementu tablicy używając jego słowa kluczowego, niezależnie od tego, gdzie jest umieszczony w tablicy. Przy określonym układzie, liczby całkowite reprezentującymi położenia w tablicy są w porządku rosnącym. Słowa kluczowe w tablicy asocjacyjnej może być w dowolnej kolejności.
można sprawdzić wartość w tablicy asocjacyjnej, wyszukując z jego słów kluczowych. Patrząc w górę słowo i zdobycie jego mimetyków wartości związanej patrząc słowo w słowniku i znalezienie jego znaczenie. Dlatego asocjacyjne tablice są nazywane słownikami.
Bash 4.0 lub nowsza
Tablice asocjacyjne są obsługiwane w Bash powłoki w wersji 4.0 lub wyższej. Jeśli używasz bieżącej dystrybucji Linuksa, powinno być w porządku. Aby sprawdzić wersję bash, użyj polecenia:
atakujących version
Urządzenie wykorzystywane do badań tego artykułu ma Bash 5.1.4 zainstalowany, więc jesteśmy dobrze iść.
Podstawowe zasady
Aby utworzyć tablicę asocjacyjną w wierszu poleceń terminala lub w skrypcie, używamy polecenia DECLARE bash. ten
-A
(Asocjacyjne) opcja nakazuje Bash, że będzie to tablica asocjacyjna, a nie tablica indeksowana.
stwierdzenie -A akronimy
To tworzy tablicę asocjacyjną nazwie „skróty”.
Aby umieścić kilka danych na naszej tablicy, musimy zapewnić słowa kluczowe i wartości. Możemy to zrobić za pomocą tego formatu:
tablicy nazwa [klucz] = wartość
Dodajmy kilka elementów tablicy:
akronimy [ACK] = Potwierdzenie
akronimy [BGP] = "Border Gateway Protocol"
akronimy [CIDR] = "Bezklasowa wewnątrz domeny trasy"
akronimy [DHCP] = "protokół dynamicznej konfiguracji hosta"
akronimy [EOF] = "Koniec ramki"
Polecenia te określają pięć elementów macierzy. Zauważ, że wartości są pakowane w cudzysłowie, jeśli istnieją przestrzenie w wartości. Nasze słowa kluczowe zostały wpisane w kolejności alfabetycznej, ale mogą być wprowadzane w dowolnej kolejności. Słowa kluczowe muszą być unikalne. Jeśli próbujesz utworzyć dwa wpisy z tego samego słowa kluczowego, drugą wartość, aby wprowadzić zastąpi pierwszy. Nadal będziesz mieć tylko jeden wpis z danego słowa kluczowego, a zostanie on powiązany z drugiej wartości, które sami dodali.
Aby pobrać wartości z tablicy, używamy polecenia w tym formacie:
$ {Tablica nazwa [klucz]}
Możemy użyć echo wysłać wyjście do okna terminala:
echa $ {akronimy [ACK]}
echa $ {akronimy [DHCP]}
Korzystanie Loops
Macierze nadają się bardzo dobrze być używane w pętlach. Obiekty stowarzyszone nie są wyjątkiem. Pętle zapewniają skuteczne sposoby wywołania sekwencji działań bez powtarzalnych sekcji kodu. Zanim spojrzymy na pętle, jest skuteczny sposób na zadeklarowanie tablic.
Tworzymy tabliczki za pomocą
ogłosić
polecenie (to samo
-A
Opcja jak wcześniej), ale zapewniamy słowa kluczowe i wartości jako lista w wierszu poleceń.
Deklaruj-Kraje = ([Alb] = Albania [BHR] = Bahrajn [CMR] = Kamerun [DNK] = Dania [EGY] = Egipt)
Nazwa tablicy jest "kraje" i jest podłączony do listy wartości przez znak równy "
=.
. " Lista wartości jest zawinana w nawiasy "
()
"A każde słowo kluczowe jest zawinięte w wsporniki"
[]
". Zauważ, że nie ma przecinków oddzielających wartości. Jeśli masz ciąg wartości, który zawiera spacje, musisz go owinąć w cudzysłowie.
Aby utworzyć tablicę asocjacyjną zwrócić słowo kluczowe zamiast wartości, dodaj wykrzyknik "
!
"Przed nazwą tablicy. Symbol "
@
"Może być używany jako symbol wieloznaczny, co oznacza wszystkie elementy tablicy.
Ten
dla
Pętla zawiera wszystkie słowa kluczowe:
Dla klucza w "$ {! Kraje [@]}"; czy echo $ klucz; zrobione
Należy pamiętać, że słowa kluczowe nie są koniecznie wymienione w kolejności, którą zostały stworzone, ale to nie ma znaczenia. Tablice stowarzyszone nie polegają na zamówionym indeksie.
Możemy również użyć rozbudowy parametrów, aby wymienić wszystkie słowa kluczowe. Będą wymienione na jednej linii, a nie na linii.
Echo "$ {! Kraje [@]}"
Echo "$ {! Akronims [@]}"
Możemy zwiększyć naszą
dla
Pętla, aby wydrukować słowa kluczowe i wartości w tym samym czasie.
Dla klawisza w "$ {! Akronims [@]}; czy echo "$ Key - $ {akronims [$ Key]}"; zrobione
Jeśli chcemy wiedzieć, ile elementów znajduje się w tabliczkach, możemy użyć hasha "#" przed nazwą tablicy zamiast wykrzyknika.
Echo "$ {! Kraje [@]}"
Echo "$ {! Akronims [@]}"
Sprawdzanie, czy istnieje element tablicy
Jeśli szukasz słowa kluczowego, ale nie ma takiego elementu tablicy, wartość powrotowa będzie pustym sznurkiem. Czasami warto mieć inny wskaźnik obecności lub braku elementu tablicy.
Możemy sprawdzić na obecność elementu tablicy przy użyciu "
+ _
"Operator. Należy zauważyć, że pochodzi po słowie kluczowym, nie przed nazwą tablicy, taką jak poprzednie operatorzy, które widzieliśmy.
Jeśli [$ {akronimy [EOF] + _}]; Następnie echo "znaleziono"; inaczej echo "nie znaleziono"; fi
Jeśli [$ {akronimy [FTP] + _}]; Następnie echo "znaleziono"; inaczej echo "nie znaleziono"; fi
Element tablicy ze słowem kluczowym "EOF" znajduje się w tablicy, ale element tablicy ze słowem kluczowym "FTP" nie jest.
Dodawanie elementów tablicy
Dodanie nowych elementów do tablicy asocjacyjnej jest łatwe. W przeciwieństwie do niektórych języków programowania, nie musisz definiować rozmiaru tablicy, gdy go deklarujesz. Możesz kontynuować dodawanie nowych elementów bez trafienia na predefiniowaną górną granicę.
Aby dodać nowy element do tablicy, używamy "
+ =.
"Operator.
Kraje + = ([FYI] = Fidżi)
Echo "$ (# kraje [@]}"
Echo $ {kraje [FYI]}
Liczba elementów w tablicy wynosi teraz sześć, a wyszukiwanie nowych słów kluczowych znajdzie element tablicy i zwraca jego wartość.
Usuwanie elementów tablic i tablic
ten
nieoprawny
polecenie służy do usuwania elementów tablicy. Jeśli słowo kluczowe ma w nim spacje, owinąć go w cudzysłów.
Nieusteczni akronimy [EOF]
Jeśli [$ {akronimy [EOF] + _}]; Następnie echo "znaleziono"; inaczej echo "nie znaleziono"; fi
Aby usunąć całą tablicę, użyj
nieoprawny
z nazwą tablicy.
Nieusteczne kraje
Używanie zmiennych z tablicami
Używanie zmiennych z tablicami asocjacyjnymi jest proste. W tym przykładzie ustawymy klucz zmienny do ciągów "EOF". Użyjemy zmiennej, gdy dodamy nowy element tablicy do tablicy. Właściwie zastępujemy element tablicy, który usunęliśmy wcześniej.
Będziemy odzyskać nowy element tablicy, dzwoniąc do nowego słowa kluczowego, a także za pomocą zmiennej. Jeśli słowo kluczowe zawiera spacje, musisz owinąć nazwę zmiennej w znaki cudzysłowu.
Klawisz = EOF
Akronims [$ Klucz] = "Koniec ramki"
Echo $ {Acronyms [EOF]}
Echo $ {akronims [Klucz $]}
Bądź kreatywny
Nasze przykłady były kolekcjami informacji, w których każdy element tablicy jest niezależny od wszystkich pozostałych, podobnie jak słownik. Każda z nich jest wyjątkową definicją. Ale tablice asocjacyjne mogą równie łatwe przy pomocy różnorodne informacje dotyczące wszystkich powiązanych z jedną rzeczą, takie jak specyfikacje różnych elementów sprzętu komputerowego:
Deklaruj -a Specyfikacja
Specyfikacja [CPU] = "Dual Core AMD Ryzen 5 3600"
Specyfikacja [prędkość] = "3600 MHz"
Specyfikacja [Kernel] = "5.11.0-17-Generic x86_64"
Specyfikacja [MEM] = "1978,5 MIB"
Specyfikacja [Storage] = "32 GIB"
Specyfikacja [Powłoka] = "Bash"
Echo $ {Specyfikacja [CPU]}
Pisanie skutecznie w języku oznacza poznanie mechanizmów i struktur, które oferuje, a wybierając najbardziej odpowiedni dla problemu, który próbujesz rozwiązać. Skoczeniowe tablice zapewniają łatwy w użyciu sposób przechowywania danych, które można wyszukać według nazwy, podobnie jak słownik.