Praca z tablicami w SKRYPYJNYCH SKRYTACJI LINUX - Część 8

Praca z tablicami w SKRYPYJNYCH SKRYTACJI LINUX - Część 8

Nie możemy sobie wyobrazić języka programowania bez koncepcji tablic. Nie ma znaczenia, w jaki sposób są one wdrażane w różnych językach. Zamiast tego tablice pomagają nam w konsolidacji danych, podobnych lub różnych, pod jedną symboliczną nazwą.

Praca z tablicami w skrócie skorupy

Tutaj, gdy martwimy się o scenariusze powłoki, ten artykuł pomoże ci bawić.

Inicjalizacja i użycie tablicy

Z nowszymi wersjami BASH obsługuje jednowymiarowe tablice. Tablicę może być wyraźnie zadeklarowana przez ogłosić Builtin.

Deklaruj -a var 

Ale nie jest konieczne deklarowanie zmiennych tablicowych jak wyżej. Możemy wstawić poszczególne elementy do tablicy bezpośrednio w następujący sposób.

var [xx] = 

gdzie „xx” oznacza indeks tablicy. Aby odważyć elementy tablicy, użyj składni kręconego wspornika, i.mi.

$ var [xx] 

Notatka: Indeksowanie tablicy zawsze zaczyna się od 0.

Innym wygodnym sposobem inicjalizacji całej tablicy jest użycie pary nawiasu, jak pokazano poniżej.

var = (element1 element2 Element3… elementn) 

Istnieje jeszcze inny sposób przypisywania wartości do tablic. Ten sposób inicjalizacji jest podkategorią wcześniej wyjaśnionej metody.

array = ([xx] = [xx] =…) 

Możemy również odczytać/przypisać wartości do tablicy w czasie wykonywania za pomocą Czytać Builtin.

Przeczytaj -tablica 

Teraz po wykonaniu powyższego instrukcji wewnątrz skryptu czeka na pewne dane wejściowe. Musimy podać elementy tablicy oddzielone przestrzenią (a nie powrót do powozu). Po wprowadzeniu wartości naciśnij Enter, aby zakończyć.

Aby przejść przez elementy tablicy, których możemy również użyć do pętli.

bo w „$ array [@]” wykonaj #Access każdy element jako $ i… gotowe 

Poniższy skrypt podsumowuje zawartość tej konkretnej sekcji.

#!/bin/bash array1 [0] = jedna tablica1 [1] = 1 echo $ array1 [0] echo $ array1 [1] array2 = (jeden dwa trzy) echo $ array2 [0] echo $  array2 [2] array3 = ([9] = Nine [11] = 11) echo $ array3 [9] echo $ array3 [11] czytaj -a array4 dla i in "$ array4 [@] "Zrobiłem echo $, kiedy zrobiłem wyjście 0 

Różne operacje na tablicach

Wiele standardowych operacji ciągu działa na tablicach . Spójrz na następujący przykładowy skrypt, który implementuje niektóre operacje na tablicach (w tym operacje ciągów).

#!/bin/bash array = (Apple Bat Cat Dog Dog Elephant Frog) #print Pierwszy element Echo $ array [0] echo $ array: 0 #display Wszystkie elementy echo $ array [@] echo $ array [array [ @]: 0  [0] echo $ #array #number of Elements Echo $ #array [*] echo $ #array [@] #replaing Substring $ array [@] // a/a exit 0 

Poniżej znajduje się wyjście wyprodukowane po wykonywaniu powyższego skryptu.

jabłko jabłko jabłko nietoperz kota pies słonia żaba jabłko bat pies pies słonia żaba bat pies pies słonia żaba bat pies pies słonia 5 5 6 6 Apple bat kot pies pies słonia 

Myślę, że nie ma znaczenia w szczegółowym wyjaśnieniu powyższego skryptu, ponieważ jest on oczywisty. W razie potrzeby poświęcę jedną część w tej serii wyłącznie na manipulacje ciągami.

Zastąpienie dowodzenia tablicami

Podstawienie polecenia przypisuje dane wyjściowe polecenia lub wiele poleceń do innego kontekstu. Tutaj, w tym kontekście tablic, możemy wstawić wyjście poleceń jako poszczególnych elementów tablic. Składnia jest następująca.

array = ($ (polecenie)) 

Domyślnie zawartość wyjściowa polecenia oddzielona białymi przestrzeniami jest podłączona do tablicy jako poszczególne elementy. Poniższy skrypt wymieniono zawartość katalogu, które są plikami o 755 uprawnieniach.

#!/bin/bash err = 27 ext = 0, jeśli [$# -NE 1]; Następnie echo „Zastosowanie: 0 USD” Wyjdź $ err fi, jeśli [ ! -d 1 $]; wówczas echo "Directory 1 $ nie istnieje" Wyjdź $ err fi temp = ($ (Znajdź 1 $ -maxdepth 1 -Type f)) dla i in "$ @]" do uprawnia = $ (ls -l $ i) jeśli ['expr $ perm: 0: 10: "-Rwxr-xr-x"' -eq 10]; Następnie echo $ i ##*/ fi wykonano exit $ ext 

Symulowanie dwuwymiarowych tablic

Możemy łatwo przedstawić matrycę 2-wymiarową za pomocą 1-wymiarowej tablicy. W Główne kolejność rządu Elementy reprezentacji w każdym rzędzie macierzy są stopniowo przechowywane w indeksach tablicy w sposób sekwencyjny. W przypadku macierzy MXN formuła dla tego samego można zapisać.

macierz [i] [j] = tablica [n*i+j] 

Spójrz na kolejny przykładowy skrypt do dodania 2 macierzy i drukowania powstałej macierzy.

#!/bin/bash read -p "Wprowadź zamówienie macierzy [mxn]:" t m = $ t: 0: 1 n = $ t: 2: 1 echo "Wprowadź elementy dla pierwszej macierzy" dla i in ' SEQ 0 $ (($ m-1)) 'do j in' seq 0 $ (($ n-1)) 'DO Czytaj x [$ (($ n*$ i+$ j)). Wprowadź elementy dla drugiej matrycy „dla i w„ seq 0 $ (($ m-1)) „do j in 'seq 0 $ (($ n-1))„ czytaj y [$ (($ n* $ i+$ j)] z [$ (($ n*$ i+$ j)]] = $ (($ $ [$ (($ n*$ i+$ j))+$ y [$ [$ [$ [ (($ n*$ i+$ j)])) wykonane echo „macierz po dodaniu jest” dla i w „seq 0 $ (($ m-1))„ do J in ”seq 0 $ ((((( $ n -1)) 'do echo -Ne "$ z [$ (($ n*$ i+$ j)) \ t" gotowe echo -e "\ n" 

Mimo że istnieją ograniczenia dotyczące wdrażania tablic wewnątrz scenariuszy skorupy, staje się one przydatne w kilku sytuacjach, zwłaszcza gdy zajmujemy się podstawieniem dowództwa. Patrząc z administracyjnego punktu widzenia, koncepcja tablic utorowała drogę do opracowania wielu skryptów w tle w systemach GNU/Linux.