WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Команда test ("[ ]")

Команда test ("[ ]")


Дата публикации: 17-03-2013

Команда 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
СОВЕТ. Не злоупотреблять сложными условиями.

 

 

 

 

 Летом, вопрос излишней температуры воздуха становится очень актуальным. Жара может стать помехой и снизить комфорт жизни и работы, самым лучшем выходом станет Установка кондиционера. Необходимо выбрать правильную модель, которая идеально подойдет для того типа помещений, охлаждать воздух в которых она будет. Слишком мощные кондиционеры будет неэкономичны, а слишком слабые не дадут нужного результата.

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Alan J. Perlis:

"Низкоуровневый язык — это когда требуется внимание к вещам, которые никак не связаны с программами на этом языке."

Опрос

Какой антивирус Вы используете?

Kaspersky Antivirus
NOD32
Norton Antivirus
Dr.Web
Panda
Аvast!
ClamWin
Другой...