Ostrzeżenie
Nie można skryptom nadawać nazwy test - nie będą działać!
test: test [wyrażenie]
Evaluate conditional expression.
Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR. Expressions may be unary or binary. Unary
expressions are often used to examine the status of a file. There
are string operators and numeric comparison operators as well.
The behavior of test depends on the number of arguments. Read the
bash manual page for the complete specification.
File operators:
-a FILE True if file exists.
-b FILE True if file is block special.
-c FILE True if file is character special.
-d FILE True if file is a directory.
-e FILE True if file exists.
-f FILE True if file exists and is a regular file.
-g FILE True if file is set-group-id.
-h FILE True if file is a symbolic link.
-L FILE True if file is a symbolic link.
-k FILE True if file has its `sticky' bit set.
-p FILE True if file is a named pipe.
-r FILE True if file is readable by you.
-s FILE True if file exists and is not empty.
-S FILE True if file is a socket.
-t FD True if FD is opened on a terminal.
-u FILE True if the file is set-user-id.
-w FILE True if the file is writable by you.
-x FILE True if the file is executable by you.
-O FILE True if the file is effectively owned by you.
-G FILE True if the file is effectively owned by your group.
-N FILE True if the file has been modified since it was last read.
FILE1 -nt FILE2 True if file1 is newer than file2 (according to
modification date).
FILE1 -ot FILE2 True if file1 is older than file2.
FILE1 -ef FILE2 True if file1 is a hard link to file2.
All file operators except -h and -L are acting on the target of a symbolic
link, not on the symlink itself, if FILE is a symbolic link.
String operators:
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
Other operators:
-o OPTION True if the shell option OPTION is enabled.
-v VAR True if the shell variable VAR is set.
-R VAR True if the shell variable VAR is set and is a name
reference.
! EXPR True if expr is false.
EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
arg1 OP arg2 Arithmetic tests. OP is one of -eq, -ne,
-lt, -le, -gt, or -ge.
Arithmetic binary operators return true if ARG1 is equal, not-equal,
less-than, less-than-or-equal, greater-than, or greater-than-or-equal
than ARG2.
See the bash manual page bash(1) for the handling of parameters (i.e.
missing parameters).
Exit Status:
Returns success if EXPR evaluates to true; fails if EXPR evaluates to
false or an invalid argument is given.
Podpowiedź
Polecenie test czasami używane jako „Polecenie [ (nawias kwadratowy)”.
test wyrażenie1 operator wyrażenie2
Polecnie test zwraca wartość 0 (true)
jeśli warunek jest spełniony i wartość 1 (false)
jeśli warunek nie jest spełniony.
Wynik działania polecenia umieszczony jest w zmiennej specjalnej $?
.
Podpowiedź
polecenie to może być także zapisane w postaci nawiasów kwadratowych (które są de-facto aliasem do polecenia test):
[ wyrażenie1 operator wyrażenie2 ]
Ostrzeżenie
Między nawiasami a treścią warunku muszą być spacje, inaczej skrypt nie wykona się poprawnie. Porównując dwa łancuchy znakowe oba muszą być w cudzysłowach!
Ostrzeżenie
W innych językach programowania false
oznaczane jest wartością równą 0
, natomiast true
wartością różną od zera
.
-b
- plik istnieje i jest blokowym plikiem specjalnym-c
- plik istnieje i jest plikiem znakowym-d
- katalog istnieje-e
- plik istnieje-f
- plik istnieje i jest plikiem zwykłym-h
- plik istnieje i jest linkiem symbolicznym-r
- plik można czytać-w
- plik można zapisywać-x
: plik można wykonywaćplik1 -nt plik2
- plik1 jest nowszy od pliku2plik1 -ot plik2
- plik1 jest starszy od pliku2
-eq
- równy (equal to)-ne
- różny (not equal to)-lt
- mniejszy niż (less than)-le
- mniejszy lub równy (less than or equal to)-gt
- większe niż (greather than)-ge
- większe lub równe (greather or equal to)
=
- równy!=
- różny<
- pierwszy tekst alfabetycznie przed drugim>
- pierwszy tekst alfabetycznie za drugim-n
- wyrażenie ma długość większą niż 0-z
- wyrażenie ma zerową długość [ $x = „” ]
Więcej przykładów można znaleźć w dokumentacji systemowej (man test
, man bash
).
#!/bin/sh
echo "Podaj login:"
read login
if [ "$login" != "kolorowy_mis" ]
then
echo 'Dostep zabroniony, odejdz. '
else
echo 'Witaj Kolorowy Misiu, jak mija Twoj dzien?'
fi
Skrypt przedstawiony powyżej zapyta użytkownika o imię i w zależności od opowiedzi wyświetli odpowiednie powitanie.
Ostrzeżenie
Pamiętaj, żeby zawsze otaczać zmienne znakiem cala ("
) - przynajmniej na początku swojej przygody z Bashem,
w przeciwnym wypadku masz dużą szansę na to, że Twój skrypt będzie po prostu źle działał.
Objawia się to szczególnie przy niektórych wartościach zmiennej (np. dla pustej zmiennej, lub łancucha zawierającego w sobie spacje).
Za takie a nie inne działanie odpowiada zmienna IFS
ale nie tylko ona … - jest to temat poruszony w zagadnieniach zaawansowanych.