Porównywanie strun w Bash A Hass-on Tutorial
- 1702
- 436
- Natan Cholewa
Porównywanie stringów jest powszechnym zadaniem podczas pracy z skontaktami powłoki, danych wejściowych użytkownika lub danymi łańcuchowymi. W skorupce może być konieczne sprawdzenie, czy wartość istnieje w innym ciągu, znajdź, czy dwa ciągi mają taką samą długość, test na początek lub koniec słowa, czy jakikolwiek inny rodzaj porównania. Standardowe narzędzia UNIX nie zapewnia wielu opcji porównywania ciągów; Tradycyjne porównanie leksykalne (takie jak sprawdzenie, czy dwa słowa mają tę samą długość i indywidualnie porównywanie każdej postaci) jest trudne do wydajnego wdrożenia w kodzie i nie jest tak cenne dla dynamicznego języka, takiego jak Bash.
W tym artykule wyjaśniono różne sposoby porównywania ciągów w Bash i kilku powiązanych poleceń.
Operatorzy porównywania ciągów
Możemy użyć operatorów porównawczych z BASH, jeśli instrukcje do porównania dwóch ciągów. Oto lista operatorów porównawczych do pracy ze strunami w powładzie bash.
Operator | Detale |
---|---|
[„String1” == „String2”] | Zwraca prawdziwie, jeśli oba ciągi są równe. |
[„String1” != „String” | Zwraca prawdziwie, jeśli oba ciągi nie są równe. |
[„String = ~ Regex] | Porównaj String1 z wyrażeniem regularnym i zwróć prawdziwe dopasowania |
[-z „String”] | Zwróć true, jeśli dana długość ciągu wynosi zero (0) |
[-n „string”] | Zwróć true, jeśli dana długość ciągu nie wynosi zero |
Teraz omówimy powyższego operatora porównawczego jeden po drugim z przykładami.
Porównanie dwóch ciągów jest równe?
Jeśli chcesz sprawdzić, czy dwa ciągi są równe, użyj ==
operator. Operatorzy ci porównują lewy operand z prawym operandem i zwracają prawdziwie, jeśli oba pasują.
Zrozummy z przykładem. W skrypcie powłoki zainicjuj dwie zmienne za pomocą ciągu. Następnie użyj instrukcji IF, aby porównać, czy oba ciągi są równe, czy nie używają ==
operator.
1234567891011 | #!/usr/bin/env bash str1 = "tecadmin" str2 = "tecadmin" if ["$ str1" == "$ str2"], a następnie echo „oba struny są równe„ echo ”Oba struny nie są równe„ fi ”fi |
Uruchom powyższy skrypt powłoki w powładzie bash i sprawdź wyniki.
Wyjście: oba ciągi są równe
Teraz zmień wartości obu zmiennych za pomocą różnych ciągów. Następnie skrypt i zobacz wyniki.
Sprawdź, czy dwa ciągi nie są równe (!=)
Czasami musimy sprawdzić, czy oba ciągi nie są równe. Możesz użyć !=
operator do przetestowania, czy dwa ciągi nie są równe. Sprawdźmy z przykładem:
123456789101112 | #!/usr/bin/env bash str1 = "tecadmin" str2 = "helloworld" ## Sprawdź, czy oba ciągi nie są równe [„$ str1” != „$ Str2”] Następnie echo „true, oba ciągi nie są równe„ else echo ”fałszywe, oba ciągi są równe” FI |
Uruchom powyższy skrypt powłoki w powładzie bash i sprawdź wyniki.
Wyjście: Prawda, oba ciągi nie są równe
Porównaj struny z wyrażeniem regularnym
Aby porównać ciągi z wyrażeniami regularnymi w BASH, możesz użyć polecenia „GREP” z opcją „-e” (rozszerzona regex). Polecenie „GREP” przeszukuje ciąg wzoru i zwraca kod wyjścia sukcesu (0), jeśli wzór zostanie znaleziony i kod wyjścia (1), jeśli wzór nie zostanie znaleziony.
Oto przykład użycia polecenia „GREP” do porównania ciągu z wyrażeniem regularnym:
String = „Hello World” If Echo „$ String” | grep -e "^hello"; Następnie Echo „Match Found” Else Echo „Nie znaleziono” FI123456 | String = „Hello World” If Echo „$ String” | grep -e "^hello"; Następnie Echo „Match Found” Else Echo „Nie znaleziono” FI |
Możemy również porównać ciąg z wyrażeniem regularnym w skryptach bash. Korzystając z porównania ciągów z wyrażeniem regularnym z instrukcją IF, zawsze powinieneś zawierać z [[]]
cytaty. Poniższy przykład pokaże pomóc Ci sprawdzić, czy zmienna zawiera ciąg, który zaczyna się od określonego ciągu.
12345678910 | #!/usr/bin/env bash str = "tecadmin", jeśli [["$ str" = ~ ^tec]] Następnie echo „Tak, wyrażenie regularne pasuje do„ else echo ”wyrażenie regularne nie pasuje do” FI |
Wyjście: tak, wyrażenie regularne pasuje do
Sprawdźmy inny przykład. W tym skrypcie zachęcimy użytkownika do wprowadzenia numeru. Następnie sprawdź, czy wartość wejściowa jest liczbą, czy nie. Kontażu liczbowe cyfry od 0 do 9.
#!/usr/bin/env bash odczyt -p „Wpisz liczbę:” VAR ## Sprawdź, czy wartość wejściowa jest liczbą, jeśli [["$ var" = ~ ^[0-9]+$]], a następnie echo "podano" Wejście to liczba „inaczej echo” przepraszam, dane wejściowe nie jest liczbą „fi”1234567891011 | #!/usr/bin/env bash odczyt -p „Wprowadź numer:” VAR ## Sprawdź, czy wartość wejściowa to numerf [["$ var" = ~ ^[0-9]+$]], a następnie echo "Podano Inputput to liczba „else echo” przepraszam, dane wejściowe nie jest liczbą „fi” |
Uruchom powyższy skrypt bash i podaj dane wejściowe po wyświetleniu monitu.
Pierwszy uruchomienie: Wejście Liczba: 12 Podane dane wejściowe to liczba
Ponownie uruchom ten skrypt, ale tym razem wprowadź wartość niewiazową i zobacz wyniki.
Drugi bieg: Wpisz Numer: 1234a Przepraszamy, wejście nie jest liczbą
Sprawdź, czy ciąg jest pusty
Aby sprawdzić, czy ciąg jest pusty w Bash, możesz użyć następującej składni:
if [-z "$ string"]; wtedy Echo „String jest pusty” Else ”ciąg nie jest pusty” FI12345 | if [-z "$ string"]; wtedy Echo „String jest pusty” Else ”ciąg nie jest pusty” FI |
„-Z” Operator służy do testowania, czy długość łańcucha wynosi zero. Jeśli długość łańcucha wynosi zero, wyrażenie wewnątrz nawiasów kwadratowych zwraca true, a klauzula „następnie” jest wykonywana. Jeśli długość łańcucha jest większa niż zero, wyrażenie zwraca false, a klauzula „else” jest wykonywana.
Wniosek
Podsumowując, porównywanie ciągów w BASH jest podstawowym aspektem scenariuszy powłoki, który można wykorzystać do podejmowania decyzji, kontrolowania przepływu skryptów i przetwarzania danych. W tym praktycznym samouczku omówiliśmy podstawy porównania strun w BASH, w tym różnych operatorów porównawczych, składni i wspólnych pułapek. Podaliśmy również przykłady i ćwiczenia, które pomogą Ci ćwiczyć i opanować koncepcje przedstawione w tym samouczku. Postępując zgodnie z najlepszymi praktykami opisanymi w tym samouczku, możesz napisać skrypty, które są bardziej niezawodne, niezawodne i wydajne. Niezależnie od tego, czy jesteś początkującym, czy doświadczonym użytkownikiem, porównanie String w Bash jest cenną umiejętnością, która może pomóc w automatyzacji zadań, rozwiązywaniu problemów i w pełni wykorzystania skontleurowców.