П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 180911 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 79511 раз(а).

Учебник HTML.
Просмотров 75992 раз(а).

Руководство по PHP5.
Просмотров 47034 раз(а).

Хостинг через призму DNS.
Просмотров 54511 раз(а).

Подборка текстов стандартных документов.
Просмотров 46800 раз(а).

Учебник PHP - Самоучитель
Просмотров 53051 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 53674 раз(а).

Внешние атаки...
Просмотров 43364 раз(а).

Учебник PHP.
Просмотров 38887 раз(а).

SSI в примерах.
Просмотров 28771 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





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

[Назад] [Содержание] [Вперед]



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: