.\"- .\" Copyright (c) 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the Institute of Electrical and Electronics Engineers, Inc. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)test.1 8.1 (Berkeley) 5/31/93 .\" %FreeBSD: src/bin/test/test.1,v 1.26 2006/12/14 10:42:46 ru Exp % .\" $FreeBSDru: frdp/doc/ru_RU.KOI8-R/man/man1/test.1,v 1.3 2007/11/20 13:50:08 ru Exp $ .\" $FreeBSD$ .\" .Dd 31 июля 2006 .Dt TEST 1 .Os .Sh НАЗВАНИЕ .Nm test , .Nm \&[ .Nd утилита проверки условий .Sh СИНТАКСИС .Nm .Ar выражение .Nm \&[ .Ar выражение Cm ] .Sh ОПИСАНИЕ Утилита .Nm проверяет условие, и если оно выполняется, возвращает 0 (истина). В противном случае возвращается 1 (ложь). Если условие не задано, test также возвратит 1 (ложь). .Pp Все операторы и флаги представляют собой отдельные аргументы к данной утилите. .Pp Для создания выражений используются следующие примитивы: .Bl -tag -width Ar .It Fl b Ar файл Истина если .Ar файл существует и является специальным файлом блочного устройства. .It Fl c Ar файл Истина если .Ar файл существует и является специальным файлом посимвольного устройства. .It Fl d Ar файл Истина если .Ar файл существует и является каталогом. .It Fl e Ar файл Истина если .Ar файл существует (независимо от типа). .It Fl f Ar файл Истина если .Ar файл существует и является обычным файлом. .It Fl g Ar файл Истина если .Ar файл существует и имеет установленный флаг .Dq "установить идентификатор группы" (set group ID). .It Fl h Ar файл Истина если .Ar файл существует и является символической ссылкой. Этот оператор сохранён для совместимости с предыдущими версиями программы. Не стоит полагаться на его наличие, вместо этого используйте .Fl L . .It Fl k Ar файл Истина если .Ar файл существует и имеет установленный бит sticky. .It Fl n Ar строка Истина если длина строки .Ar строка ненулевая. .It Fl p Ar файл Истина если .Ar файл является именованным каналом .Pq Tn FIFO . .It Fl r Ar файл Истина если .Ar файл существует и доступен на чтение. .It Fl s Ar файл Истина если .Ar файл существует и его длина больше нуля. .It Fl t Ar дескриптор_файла Истина если файл, дескриптор которого задаётся аргументом .Ar дескриптор_файла , открыт и связан с терминалом. .It Fl u Ar файл Истина если .Ar файл существует и имеет установленный флаг .Dq "установить идентификатор пользователя" (set user ID). .It Fl w Ar файл Истина если .Ar файл существует и доступен на запись. Истина лишь означает, что флаг записи включен. В файловой системе доступной только на чтение файл не является записываемым, даже если эта проверка показывает обратное. .It Fl x Ar файл Истина если .Ar файл существует и является исполняемым. Истина лишь означает, что флаг запуска включен. Если .Ar файл является каталогом, истина означает, что внутри него возможно производить поиск. .It Fl z Ar строка Истина если длина аргумента .Ar строка нулевая. .It Fl L Ar файл Истина если .Ar файл существует и является символической ссылкой. .It Fl O Ar файл Истина если .Ar файл существует и его владелец совпадает с идентификатором эффективного пользователя данного процесса. .It Fl G Ar файл Истина если .Ar файл существует и его группа совпадает с идентификатором эффективной группы данного процесса. .It Fl S Ar файл Истина если .Ar файл существует и является сокетом. .It Ar файл1 Fl nt Ar файл2 Истина если .Ar файл1 существует и новее файла .Ar файл2 . .It Ar файл1 Fl ot Ar файл2 Истина если .Ar файл1 существует и старее файла .Ar файл2 . .It Ar файл1 Fl ef Ar файл2 Истина если файлы .Ar файл1 и .Ar файл2 существуют и ссылаются на один и тот же файл. .It Ar строка Истина если .Ar строка не является пустой. .It Ar s1 Cm = Ar s2 Истина если строки .Ar s1 и .Ar s2 идентичны. .It Ar s1 Cm != Ar s2 Истина если строки .Ar s1 и .Ar s2 отличаются. .It Ar s1 Cm < Ar s2 Истина если строка .Ar s1 предшествует строке .Ar s2 основываясь на двоичном значении их символов. .It Ar s1 Cm > Ar s2 Истина если строка .Ar s1 следует за .Ar s2 основываясь на двоичном значении их символов. .It Ar n1 Fl eq Ar n2 Истина если целые числа .Ar n1 и .Ar n2 алгебраически равны. .It Ar n1 Fl ne Ar n2 Истина если целые числа .Ar n1 и .Ar n2 алгебраически не равны. .It Ar n1 Fl gt Ar n2 Истина если целое .Ar n1 алгебраически больше целого .Ar n2 . .It Ar n1 Fl ge Ar n2 Истина если целое .Ar n1 алгебраически больше либо равно целому .Ar n2 . .It Ar n1 Fl lt Ar n2 Истина если целое .Ar n1 алгебраически меньше целого .Ar n2 . .It Ar n1 Fl le Ar n2 Истина если целое .Ar n1 алгебраически меньше либо равно целому .Ar n2 . .El .Pp Если .Ar файл является символической ссылкой, то .Nm полностью разыменовывает её и далее вычисляет выражение уже с конечным файлом, за исключением примитив .Fl h и .Fl L . .Pp Примитивы могут комбинироваться со следующими операторами: .Bl -tag -width Ar .It Cm \&! Ar выражение Истина если .Ar выражение ложно. .It Ar выражение1 Fl a Ar выражение2 Истина если оба .Ar выражение1 и .Ar выражение2 истинны. .It Ar выражение1 Fl o Ar выражение2 Истина если хотя бы одно из выражений .Ar выражение1 и .Ar выражение2 истинно. .It Cm \&( Ns Ar выражение Ns Cm \&) Истина если выражение истинно. .El .Pp Оператор .Fl a имеет более высокий приоритет, чем оператор .Fl o . .Pp Некоторые командные оболочки имеют встроенную команду .Nm с похожей либо идентичной функциональностью. Обратитесь к странице справочника .Xr builtin 1 . .Sh НЕОДНОЗНАЧНОСТЬ ГРАММАТИКИ Грамматика утилиты .Nm по своей сути неоднозначна. Чтобы обеспечить определённую степень непротиворечивости, случаи, рассматриваемые стандартом .St -p1003.2 в разделе D11.2/4.62.4, вычисляются строго в соответствии с правилами, указанными в документе стандарта. Все остальные случаи ограничены неоднозначностями в семантике команды. .Sh ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ Утилита .Nm возвращает одно из следующих значений: .Bl -tag -width indent .It 0 Выражение истинно. .It 1 Выражение ложно или отсутствует. .It >1 Произошла ошибка. .El .Sh СМОТРИ ТАКЖЕ .Xr builtin 1 , .Xr expr 1 , .Xr sh 1 , .Xr symlink 7 .Sh СТАНДАРТЫ Утилита .Nm реализует расширение спецификации .St -p1003.2 . .Sh ПРОБЛЕМЫ В случае использования .Fl a и .Fl o , всегда вычисляются обе части выражения, в отличие от логических операторов .Xr sh 1 . Например, следующей командой будет проверяться возможность записи в .Pa файл , несмотря на то, что первое выражение является ложным. Результатом этого будет ненужное обращение к файловой системе: .Pp .Dl "[ -z abc -a -w файл ]"