Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell.
Два возможных формата команды:
test условие
[ условие ]
На самом деле shell будет распознавать эту команду по открывающей скобке "[", как слову(!), соответсвующему команде "test". Уже этого достаточно, чтобы предупредить о распространенной ошибке начинающих: Между скобками и содержащимся в них условием обязательно должны быть пробелы.
Пробелы должны быть и между значениями и символом сравнения или операции (как, кстати, и в команде "expr"). Не путать с противоположным требованием для присваивания значений переменным.
В shell используются условия различных "типов".
УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:
-f file - файл "file" является обычным файлом; -d file - файл "file" - каталог; -с file - файл "file" - специальный файл; -r file - имеется разрешение на чтение файла "file"; -w file - имеется разрешение на запись в файл "file"; -s file - файл "file" не пустой.
[ -f specific ] ; echo $? 0 [ -d specific ] ; echo $? 1
str1 = str2 - строки "str1" и "str2" совпадают; str1 != str2 - строки "str1" и "str2" не совпадают; -n str1 - строка "str1" существует (непустая); -z str1 строка "str1" не существует (пустая).
x="who is who"; export x; [ "who is who" = "$x" ]; echo $? 0 x=abc ; export x ; [ abc = "$x" ] ; echo $? 0 x=abc ; export x ; [ -n "$x" ] ; echo $? 0 x="" ; export x ; [ -n "$x" ] ; echo $? 1
[ privet ] ; echo $? 0 [ ] ; echo $? 1
true ; echo $? 0 false ; echo $? 1
x -eq y - "x" равно "y", x -ne y - "x" неравно "y", x -gt y - "x" больше "y", x -ge y - "x" больше или равно "y", x -lt y - "x" меньше "y", x -le y - "x" меньше или равно "y".
x=abc ; export x ; [ abc -eq "$x" ] ; echo $? "[": integer expression expected before -eq x=321 ; export x ; [ 321 -eq "$x" ] ; echo $? 0 x=3.21 ; export x ; [ 3.21 -eq "$x" ] ; echo $? "[": integer expression expected before -eq x=321 ; export x ; [ 123 -lt "$x" ] ; echo $? 0
! - (not) инвертирует значение кода завершения. -o - (or) соответсвует логическому "ИЛИ". -a - (and) соответсвует логическому "И".
Примеры.
[ ! privet ] ; echo $? 1 x=privet; export x; [ "$x" -a -f specific ] ; echo $? 0 x="";export x; [ "$x" -a -f specific ] ; echo $? 1 x="";export x; [ "$x" -a -f specific -o privet ] ; echo $? 0 x="";export x; [ "$x" -a -f specific -o ! privet ] ; echo $? 1