5.1. Команда test ("[ ]")
Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell.
Два возможных формата команды:
test условие
или
[ условие ]
мы будем пользоваться вторым вариантом, т.е. вместо того, чтобы писать перед условием слово "test", будем заключать условие в скобки, что более привычно для программистов.
На самом деле shell будет распознавать эту команду по открывающей скобке "[", как слову(!), соответствующему команде "test". Уже этого достаточно, чтобы предупредить о распространенной ошибке начинающих: Между скобками и содержащимся в них условием обязательно должны быть пробелы.
Пробелы должны быть и между значениями и символом сравнения или операции (как, кстати, и в команде "expr"). Не путать с противоположным требованием для присваивания значений переменным.
В shell используются условия различных "типов".
УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ:
-f file
| файл "file" является обычным файлом;
|
-d file
| файл "file" - каталог;
|
-с file
| файл "file" - специальный файл;
|
-r file
| имеется разрешение на чтение файла "file";
|
-w file
| имеется разрешение на запись в файл "file";
|
-s file
| файл "file" не пустой. |
Примеры. Вводя с клавиатуры командные строки в первом случае получим подтверждение (код завершения "0"), а во втором - опровержение (код завершения "1"). "specific" - имя существующего файла.
[ -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
ВАЖНОЕ ЗАМЕЧАНИЕ. Команда "test" дает значение "истина" (т.е. код завершения "0") и просто если в скобках стоит непустое слово.
|
[ 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".
|
То есть в данном случае команда "test" воспринимает строки символов как целые (!) числа. Поэтому во всех остальных случаях "нулевому" значению соответствует пустая строка. В данном же случае, если надо обнулить переменную, скажем, "x", то это достигается присваиванием "x=0".
Примеры.
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
СОВЕТ. Не злоупотреблять сложными условиями.
|
[Назад]
[Содержание]
[Вперед]
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|