Мы представим команду test
на примере одного простейшего условия: проверки наличия файла. Для нее понадобится следующая команда: test -f <
, поэтому в сценарии можно написать
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.
Варианты условий | Результат |
---|---|
Сравнения строк | |
| True (истина), если строки одинаковы |
| True (истина), если строки разные |
-n | True (истина), еслиСтрока null |
-z | True (истина), если
|
Сравнения чисел | |
| True (истина), если выражения равны |
| True (истина), если выражения не равны |
| True (истина), еслиВыражение1 Выражение2 |
| True (истина), еслиВыражение1 Выражение2 |
| True (истина), еслиВыражение1 Выражение2 |
| True (истина), еслиВыражение1 Выражение2 |
! | True (истина), еслиВыражение |
Файловый флаг | |
-d | True (истина), еслифайл |
-е | True (истина), еслифайл -e не была переносима на другие платформы, поэтому обычно применяется -f |
-f | True (истина), еслифайл |
-g | True (истина), если дляфайла |
-r | True (истина), если доступен для чтения |
-s | True (истина), если ненулевого размера |
-u | True (истина), если дляфайла |
-v | True (истина), еслифайл |
-х | True (истина), если
|
Вас могли заинтересовать непонятные биты set-group-id и set-user-id (также называемые set-gid и set-uid). Бит set-uid предоставляет программе права владельца, а не просто ее пользователя, бит set-gid предоставляет программе права группы. Эти биты устанавливаются командой chmod
с помощью опций s
и g
. На файлы, содержащие сценарии, флаги set-gid и set-uid не влияют, они оказывают влияние только на исполняемые двоичные файлы.
Мы немного сами себя обогнали, но далее следует пример тестирования состояния файла /bin/bash, так что вы сможете увидеть, как это выглядит на практике.
#!/bin/sh