Polecenie testowe Bash

Polecenie testowe Bash
W Bash Shell polecenie testowe porównuje jeden element z drugim i zwraca prawda lub fałsz. W skryptach Bash polecenie testowe jest integralną częścią instrukcji warunkowych, które kontrolują logikę i przepływ programu.

Ten przewodnik pokazuje, jak korzystać z polecenia testowego Bash.

Polecenie testowe

Polecenie testowe wymaga WYRAŻENIE jako argument. Po obliczeniu wyrażenia test zwraca wartość do zmiennej Bash „$?". Jeśli wartość wynosi 0, wówczas ocena wyrażenia była prawdziwa. Jeśli wartość wynosi 1, wówczas ocena wyrażenia była fałszywa.

Istnieją dwie składni do korzystania z polecenia testowego.

$ Wyrażenie testowe
$ [Wyrażenie]

Zauważ, że w przypadku „[” na obu końcach WYRAŻENIE.

Wykorzystanie testów

Oto krótki przykład działania polecenia testowego. Będziemy sprawdzić, czy 1 równa się 2. Jeśli prawda, to wyjście będzie „prawdziwe”. W przeciwnym razie wyjście będzie „fałszywe”.

$ TEST 1 -EQ 2 && ECHO „True” || echo „fałszywe”

Rozbijmy to.

  • Test: polecenie testowe.
  • 1: Pierwszy element do porównania.
  • -Eq: Metoda porównawcza (czy wartości są równe).
  • 2: Drugi element do porównania.

Jeśli część testowa jest prawdziwa, wówczas pierwsze polecenie Echo zostanie wykonane. W przeciwnym razie wykonanie drugiego polecenia Echo.

To samo polecenie można wyrazić za pomocą „[”.

$ [1 -eq 2] && echo „true” || echo „fałszywe”

Wyrażenie

Wyrażenie daje testowi polecenie jego prawdziwej mocy. Test może używać ciągów, plików i liczb całkowitych do porównania. Oto szybka lista wszystkich dostępnych formatów wyrażeń testowych.

Strunowy
W programowaniu ciąg jest zestawem znaków, które są zwykle używane do reprezentowania tekstu. Na przykład „Hello World” w następującym poleceniu Echo jest traktowane jako ciąg.

$ echo „Hello World."

Polecenie testowe obsługuje następujące wyrażenia ciągów.

  • -n: długość ciągu jest niezerowa.
  • -z: długość ciągu wynosi zero.
  • : Wartość ciągu jest niezerowa (quivalent z „-n”).
  • =: Zarówno string_a, jak i string_b są równe.
  • !=: Strings String_a i String_B nie są równe.

Wypróbujmy te wyrażenia.

$ [-n „Hello World”] && echo „true” || echo „fałszywe”
$ [-z „Hello World”] && echo „true” || echo „fałszywe”
$ [„Hello World” != „Hello World”] && Echo „True” || echo „fałszywe”
$ [„Hello World” = „Hello World”] && Echo „True” || echo „fałszywe”

Liczba całkowita

Pierwszy przykład w tym przewodniku pokazuje porównanie liczb całkowitych. Istnieje więcej sposobów porównywania liczb całkowitych.

  • -Eq: Integer_a jest równy Integer_b.
  • -NE: Integer_a nie jest równe Integer_b
  • -GE: Integer_a jest większy lub równy Integer_b.
  • -GT: Integer_a jest większy niż Integer_B.
  • -LE: Integer_a jest mniejszy lub równy Integer_b.
  • -LT: Integer_a jest mniej niż Integer_B.

Uruchommy te wyrażenia.

$ [5 -eq 10] && echo „true” || echo „fałszywe”
$ [5 -GT 2] && echo „true” || echo „fałszywe”
$ [4 -le 5] && echo „true” || echo „fałszywe”

Plik

Pliki mogą być również częścią wyrażenia. Oto lista obsługiwanych wyrażeń plików.

  • -EF: Zarówno File_A, jak i File_B mają podobne urządzenie i numer iNODE. Jeśli to prawda, oznacza to, że pliki najprawdopodobniej są sympatyczne. Dowiedz się więcej o symbolicznych linkach Linux.
  • -NT: Pod względem daty modyfikacji File_A jest nowszy niż File_B.
  • -OT: File_a jest starszy niż File_B.

Reszta obsługiwanych wyrażeń plików jest powiązana z pojedynczą właściwością jednego pliku.

  • -E: File_a istnieje.
  • -f: File_a istnieje i zwykły plik.
  • -D: File_a istnieje i jest katalogiem.
  • -R: File_a istnieje z uprawnieniami do odczytu.
  • -W: File_a istnieje z uprawnieniami do zapisu.
  • -X: File_a istnieje z uprawnieniami wykonawczymi.
  • -S: File_a istnieje, a rozmiar pliku jest większy niż zero.
  • -O: File_a istnieje, a właściciel jest skutecznym identyfikatorem użytkownika.
  • -G: File_a istnieje, a właściciel jest skutecznym identyfikatorem grupy.
  • -H: File_a istnieje i jest to symboliczny link.
  • -L: File_a istnieje i jest to symboliczny link.
  • -B: File_a istnieje. To plik sprecypowy blokowy.
  • -C: File_a istnieje. To plik specjalizujący się w postaci.
  • -S: File_a istnieje. To jest gniazdo.

Rzućmy okiem na niektóre przykłady.

$ [-x/usr/bin/bash] && echo $?
$ [-s /bin /bash] && echo $?
$ [-r /bin] && echo $?
$ [-e /hello_world] && echo „true” || echo „fałszywe”

Wdrażanie testu w skryptach Bash

Do tej pory wykazaliśmy, jak użyć polecenia testowego, aby ustalić, czy określony warunek jest prawdziwy, czy fałszywy. Możemy to zaimplementować w scenariuszach BASH, aby podejmować przydatne decyzje.

Spójrz na następujący krótki skrypt.

#!/bin/bash
jeśli [$ (whoami) = root]; Następnie
echo „root”
w przeciwnym razie
echo „nie root”
fi

Tutaj stwierdzenie IF sprawdzi, czy warunek jest prawdziwy, czy fałszywy. Korzystając z polecenia testowego, możemy łatwo uzyskać wartość logiczną.

Uruchom skrypt z przywilejem korzeni i bez.

$ ./atrapa.cii
$ sudo ./atrapa.cii

To prosta demonstracja oświadczenia IF-Else. Zapraszam do sprawdzenia stwierdzeń Bash IF-Else w celu uzyskania dalszych szczegółowych zastosowań.

Końcowe przemyślenia

Polecenie testowe jest proste, ale potężne. Ten przewodnik wyjaśnia i pokazuje różne sposoby korzystania z testu. Pełna lista wszystkich obsługiwanych wyrażeń jest dostępna na stronie Man.

test $ man

Szczęśliwy komputer!