test służy do sprawdzania warunków logicznych w skryptach i wierszu poleceń. Może porównywać liczby, ciągi znaków, sprawdzać właściwości plików (istnienie, prawa dostępu, typ) oraz oceniać wyrażenia logiczne.
Zastosowania: tworzenie instrukcji warunkowych w skryptach, kontrola przepływu wykonywania.
Dostępność: wbudowane w większość powłok (bash, sh, ksh) oraz jako samodzielne polecenie (/usr/bin/test
).
[[ WYRAŻENIE ]] # Rozszerzona składnia bash
Warianty: użycie słowa kluczowego test
lub nawiasów kwadratowych []
, a w bash także podwójnych nawiasów [[ ]]
dla rozszerzonych porównań.
Parametr Opis -e plik
Sprawdza, czy plik istnieje. -f plik
Sprawdza, czy plik istnieje i jest zwykłym plikiem. -d katalog
Sprawdza, czy istnieje katalog. -r/-w/-x plik
Sprawdza prawa dostępu: odczyt, zapis, wykonanie. str1 = str2
Porównuje równość ciągów znaków. str1 != str2
Sprawdza, czy ciągi są różne. -n str
Sprawdza, czy ciąg ma długość większą niż 0. -z str
Sprawdza, czy ciąg jest pusty. n1 -eq n2
Sprawdza równość liczb całkowitych. n1 -ne/-lt/-le/-gt/-ge n2
Porównania liczbowe: różne, mniejsze, mniejsze/równe, większe, większe/równe. ! wyrażenie
Neguje wynik wyrażenia. wyraż1 -a wyraż2
AND logiczne (oba muszą być prawdziwe). wyraż1 -o wyraż2
OR logiczne (przynajmniej jedno prawdziwe).
# Sprawdź, czy plik istnieje
test -e plik.txt && echo " Plik istnieje "
if [ " $a " -gt " $b " ]; then echo " a > b " ; fi
# Użycie rozszerzonej składni bash
if [[ $str == " abc* " ]]; then echo " Pasuje " ; fi
W bash [[ ]]
jest bezpieczniejsze dla porównań ciągów (brak potrzeby uciekania niektórych znaków).
Należy pamiętać o odstępach między nawiasami []
a wyrażeniem – brak spacji spowoduje błąd składni.
test
zwraca kod zakończenia 0 (prawda) lub 1 (fałsz), co można wykorzystać w instrukcjach warunkowych i łańcuchach poleceń.
Błąd / Komunikat Przyczyna Rozwiązanie [: missing ]
Brak spacji lub zamykającego nawiasu w składni. Dodaj spacje wokół wyrażenia. unary operator expected
Brak argumentu w wyrażeniu (np. zmienna pusta). Sprawdź, czy zmienne są ustawione, używaj "$var"
. Niewłaściwe porównanie liczb Użycie operatorów >
lub <
zamiast -gt
/-lt
. W porównaniach liczbowych stosuj odpowiednie operatory.