Основы программирования в Linux
Часть 18 из 324 Информация о книге
Мы представим команду
на примере одного простейшего условия: проверки наличия файла. Для нее понадобится следующая команда:test, поэтому в сценарии можно написатьtest -f <<i>имя_файла</i>>if test -f fred.cthen...fiTo же самое можно записать следующим образом:
if [ -f fred.c ]then...fiКод завершения команды
(выполнено ли условие) определяет, будет ли выполняться условный программный код.testПримечаниеИмейте в виду, что вы должны вставлять пробелы между квадратной скобкой
и проверяемым условием. Это легко усвоить, если запомнить, что вставить символ[— это все равно, что написать[, а после имени команды вы всегда должны вставлять пробел.testЕсли вы предпочитаете помещать слово
в той же строке, что иthen, нужно добавить точку с запятой для отделения командыifотtest:thenif [ -f fred.c ]; then...fiВарианты условий, которые вы можете применять в команде
, делятся на три типа: строковые сравнения, числовые сравнения и проверка файловых флагов (file conditionals). Эти типы условий описаны в табл. 2.4.testТаблица 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>