Мы представим команду
test
на примере одного простейшего условия: проверки наличия файла. Для нее понадобится следующая команда:
test -f <<i>имя_файла</i>>
, поэтому в сценарии можно написать
if test -f fred.c
then
...
fi
To же самое можно записать следующим образом:
if [ -f fred.c ]
then
...
fi
Код завершения команды
test
(выполнено ли условие) определяет, будет ли выполняться условный программный код.
Примечание
Имейте в виду, что вы должны вставлять пробелы между квадратной скобкой
[
и проверяемым условием. Это легко усвоить, если запомнить, что вставить символ
[
— это все равно, что написать
test
, а после имени команды вы всегда должны вставлять пробел.
Если вы предпочитаете помещать слово
then
в той же строке, что и
if
, нужно добавить точку с запятой для отделения команды
test
от
then
:
if [ -f fred.c ]; then
...
fi
Варианты условий, которые вы можете применять в команде
test
, делятся на три типа: строковые сравнения, числовые сравнения и проверка файловых флагов (file conditionals). Эти типы условий описаны в табл. 2.4.
Таблица 2.4
Варианты условий | Результат |
Сравнения строк |
<i>Строка1 = Строка2</i>
| True (истина), если строки одинаковы |
<i>Строка1 != Строка2</i>
| True (истина), если строки разные |
-n<i> Строка</i>
| True (истина), если Строка не null
|
-z <i>Строка</i>
| True (истина), если <i>Строка</i> null (пустая строка) |
Сравнения чисел |
<i>Выражение1</i> -eq <i>Выражение2</i>
| True (истина), если выражения равны |
<i>Выражение1</i> -ne<i> Выражение2</i>
| True (истина), если выражения не равны |
<i>Выражение1</i> -gt Вы<i>ражение2</i>
| True (истина), если Выражение1 больше, чем Выражение2
|
<i>Выражение1</i> -ge <i>Выражение2</i>
| True (истина), если Выражение1 не меньше Выражение2
|
<i>Выражение1</i> -lt <i>Выражение2</i>
| True (истина), если Выражение1 меньше, чем Выражение2
|
<i>Выражение1</i> -lе<i> Выражение2</i>
| True (истина), если Выражение1 не больше Выражение2
|
! <i>Выражение</i>
| True (истина), если Выражение ложно, и наоборот |
Файловый флаг |
-d <i>файл</i>
| True (истина), если файл — каталог |
-е<i> файл</i>
| True (истина), если файл существует. Исторически, опция -e не была переносима на другие платформы, поэтому обычно применяется -f
|
-f <i>файл</i>
| True (истина), если файл — обычный файл |
-g <i>файл</i>
| True (истина), если для файла установлен бит set-group-id |
-r<i> файл</i>
| True (истина), если <i>файл</i> доступен для чтения |
-s <i>файл</i>
| True (истина), если <i>файл</i> ненулевого размера |
-u<i> файл</i>
| True (истина), если для файла установлен бит set-user-id |
-v <i>файл</i>
| True (истина), если файл доступен для записи |
-х<i> файл</i>
| True (истина), если <i>файл </i> — исполняемый файл |