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