Skip to main content

Jak korzystać z warunków testowych w skrypcie Bash

Test dodatku do nadstawki/Samotnego Wilka (Może 2025)

Test dodatku do nadstawki/Samotnego Wilka (Może 2025)
Anonim

Polecenie testowe może być użyte w linii poleceń Linuksa do porównania jednego elementu z drugim, ale jest częściej używane w skryptach powłoki BASH jako część instrukcji warunkowych sterujących logiką i przepływem programu.

Podstawowy przykład

Możesz wypróbować te polecenia po prostu otwierając okno terminala.

test 1 -eq 2 && echo "yes" || echo "nie"

Powyższe polecenie można podzielić w następujący sposób:

  • test - oznacza to, że masz zamiar dokonać porównania
  • 1 - Pierwszy element, który chcesz porównać
  • -eq - jak się masz porównanie. W tym przypadku testujesz, czy jedna liczba jest równa drugiej.
  • 2 - Element, z którym porównujesz pierwszy element
  • && - Uruchom następującą instrukcję, jeśli wynik jest prawdziwy
  • echo "yes" - Polecenie do uruchomienia, jeśli porównanie zwróci true
  • || - Uruchom następującą instrukcję, jeśli wynik jest fałszywy
  • echo "no" - Polecenie do uruchomienia, jeśli porównanie zwraca wartość false

W istocie, polecenie porównuje 1 do 2 i jeśli się zgadzają, wykonywane jest wyrażenie "tak", które wyświetla "tak", a jeśli nie pasują, wykonywane jest wyrażenie "nie", które wyświetla "nie".

Porównywanie liczb

Jeśli porównujesz elementy parsujące się jako liczby, możesz użyć następujących operatorów porównania:

  • -eq - ma wartość 1 równą wartość 2
  • -ge - jest wartością 1 większą lub równą wartości 2
  • -gt - jest wartością 1 większą niż wartość 2
  • -le - ma wartość 1 mniejszą lub równą wartości 2
  • -lt - jest wartością 1 mniejszą niż wartość 2
  • -ne - czy wartość 1 nie jest równa 2

Przykłady

test 1 -eq 2 && echo "yes" || echo "nie"

(wyświetla "nie" na ekranie, ponieważ 1 nie jest równy 2)

test 1 -ge 2 && echo "yes" || echo "nie"

(wyświetla "nie" na ekranie, ponieważ 1 nie jest większe lub równe 2)

test 1 -gt 2 && echo "yes" || echo "nie"

(wyświetla "nie" na ekranie, ponieważ 1 nie jest większe niż 2)

test 1 -le 2 && echo "tak" || echo "nie"

(wyświetla "yes" na ekranie, ponieważ 1 jest mniejsze lub równe 2)

test 1 -lt 2 && echo "yes" || echo "nie"

(wyświetla "yes" na ekranie, ponieważ 1 jest mniejsze lub równe 2)

test 1 -ne 2 && echo "tak" || echo "nie"

(wyświetla "yes" na ekranie, ponieważ 1 nie jest równy 2)

Porównywanie tekstu

Jeśli porównujesz elementy, które są analizowane jako łańcuchy, możesz użyć następujących operatorów porównania:

  • = - czy ciąg 1 pasuje do ciągu 2
  • ! = - jest łańcuchem 1 innym niż ciąg 2
  • -n - jest długością łańcucha większą niż 0
  • -z - jest długością łańcucha 0

Przykłady

test "string1" = "string2" && echo "yes" || echo "nie"

(wyświetla "nie" na ekranie, ponieważ "string1" nie jest równe "string2")

test "string1"! = "string2" && echo "yes" || echo "nie"

(wyświetla "yes" na ekranie, ponieważ "string1" nie jest równe "string2")

test -n "string1" && echo "yes" || echo "nie"

(wyświetla "yes" na ekranie, ponieważ "string1" ma długość łańcucha większą niż zero)

test -z "string1" && echo "yes" || echo "nie"

(wyświetla "nie" na ekranie, ponieważ "string1" ma długość łańcucha większą niż zero)

Porównywanie plików

Jeśli porównujesz pliki, możesz użyć następujących operatorów porównania:

  • -ef - Czy pliki mają to samo urządzenie i numery i-węzłów (czy są to te same pliki)
  • -nt - Jest pierwszym plikiem nowszym niż drugi plik
  • -ot - Jest pierwszym plikiem starszym niż drugi plik
  • -b - Plik istnieje i jest blokowy
  • -c - Plik istnieje i ma specjalne znaki
  • -d - Plik istnieje i jest katalogiem
  • -e - Plik istnieje
  • -f - Plik istnieje i jest zwykłym plikiem
  • -g - Plik istnieje i ma podany numer grupy
  • -G - Plik istnieje i jest właścicielem przez grupę użytkownika
  • -h - Plik istnieje i jest dowiązaniem symbolicznym
  • -k - Plik istnieje i ma ustawiony bitowy bit
  • -L - To samo co -h
  • -O - ​​Plik istnieje, jesteś jego właścicielem
  • -p - Plik istnieje i jest nazwany potokiem
  • -r - Plik istnieje i można go odczytać
  • -s - Plik istnieje i ma rozmiar większy niż zero
  • -S - Plik istnieje i jest gniazdem
  • -t - Deskryptor pliku jest otwierany na terminalu
  • -u - Plik istnieje i ustawiony bit set-user-id
  • -w - Plik istnieje i można go zapisywać
  • -x - Plik istnieje i jest wykonywalny

Przykłady

test / path / to / file1 -nt / path / to / file2 && echo "yes"

(Jeśli plik1 jest nowszy niż plik2, wyświetli się słowo "tak"

test -e / path / to / file1 && echo "yes"

(jeśli plik1 istnieje, wyświetli się słowo "tak")

test -O / path / to / file1 && echo "yes"

(jeśli jesteś właścicielem pliku1, wyświetla się słowo "tak") "

Terminologia

  • Block special - Plik jest urządzeniem blokowym, co oznacza, że ​​dane są odczytywane w blokach bajtów. Są to na ogół pliki urządzeń, takie jak dyski twarde.
  • Znak specjalny - plik jest natychmiast zapisywany w pliku i jest zwykle urządzeniem takim jak port szeregowy

Porównanie wielu warunków

Jak dotąd wszystko porównywało jedną rzecz z drugą, ale co, jeśli chcesz porównać dwa warunki?

Na przykład, jeśli zwierzę ma 4 nogi i idzie "moo", prawdopodobnie jest to krowa. Samo sprawdzenie 4 nóżek nie gwarantuje, że masz krowę, ale sprawdzenie dźwięku, który z pewnością robi.

Aby przetestować oba warunki naraz, użyj następującej instrukcji:

test 4 -eq 4 -a "moo" = "moo" && echo "to jest krowa" || echo "to nie jest krowa"

Kluczową częścią jest tutaj -a, co oznacza i .

Istnieje lepszy i częściej stosowany sposób wykonywania tego samego testu, który jest następujący:

test 4 -eq 4 && test "moo" = "moo" && echo "to krowa" || echo "to nie jest krowa"

Innym testem, który możesz chcieć dokonać, jest porównywanie dwóch instrukcji i jeśli jedna z nich jest prawdziwa, wypisz ciąg. Na przykład, jeśli chcesz sprawdzić, czy plik o nazwie "plik1.txt" istnieje lub plik o nazwie "plik1.doc" istnieje, możesz użyć następującego polecenia:

test -e plik1.txt -o -e plik1.doc && echo "plik1 istnieje" || echo "plik1 nie istnieje"

Kluczową częścią jest tutaj -o, co oznacza lub .

Istnieje lepszy i częściej stosowany sposób wykonywania tego samego testu, który jest następujący:

test -e plik1.txt || test -e plik1.doc && echo "plik1 istnieje" || echo "plik1 nie istnieje"

Eliminacja testowego słowa kluczowego

W rzeczywistości nie musisz używać słowa test, aby wykonać porównanie. Wszystko, co musisz zrobić, to zamknąć instrukcję w nawiasach kwadratowych w następujący sposób:

-e plik1.txt && echo "plik1 istnieje" || echo "plik1 nie istnieje"

I w zasadzie oznacza to samo co test.

Teraz wiesz, że możesz poprawić porównywanie wielu warunków w następujący sposób:

4 -eq 4 && "moo" = "moo" && echo "to jest krowa" || echo "to nie jest krowa"-e plik1.txt || -e plik1.doc && echo "plik1 istnieje" || echo "plik1 nie istnieje"

streszczenie

Polecenie testowe jest bardziej przydatne w skryptach, ponieważ możesz przetestować wartość jednej zmiennej względem drugiej i sterować przepływem programu. W standardowym wierszu poleceń można go użyć do sprawdzenia, czy plik istnieje, czy nie.