Шрифт:
В главе рассматриваются следующие темы:
• применение команды test для обработки файлов, строк и чисел;
• использование команды expr при проверке численных значений и строк. Команда expr выполняет проверку и вывод численных данных. Команды test
и expr с помощью кода завершения последней команды $? выводят на экран значение 0, если заданное условие выполняется, и 1, если условие не выполняется.
17.1. Проверка прав доступа к файлу
Основные форматы команды test:
test условие
или
[ условие ]
Обратите внимание, что с обеих сторон от условия обязательно остаются пробелы. При проверке права на доступ к файлу может применяться довольно много условий. В табл. 17.1 содержится перечень наиболее распространенных условий.
Таблица 17.1. Проверка прав доступа к файлу
– d
Каталог
– f
Обычный файл
– L
Символическая связь
– r
Файл для чтения
– s
Файл имеет ненулевой размер, он не пуст
– w
Файл для записей
– u
Файл имеет установленный бит suid
– x
Исполняемый файл
Чтобы проверить, установлено ли право записи для файла scores.txt, применяются оба метода проверки. При осуществлении проверки используется код завершения последней команды. Не забывайте о том, что возвращаемое нулевое значение свидетельствует о том, что условие выполняется, любое другое значение говорит о наличии ошибки.
$ ls -l scores.txt
– rw-r—г -l dave admin 0 May 15 11:29 scores.txt
$ [ -w scores.txt ]
$ echo $?
0
$ test -w scores.txt
$ echo $?
0
В обоих случаях отображается значение нуль, поэтому для данного файла установлены права записи. Теперь рассмотрим, является ли этот файл исполняемым.
$ [ -х scores.txt ]
$ echo $?
1
Нет, не является, что и следовало ожидать после изучения списка прав доступа для файла scores.txt.
В следующем примере проверяется существование каталога appsbin.
drwxr-xr-x 2 dave admin 1024 May 15 15:53 appsbin
$ [ -d appsbin ]
$ echo $?
0
Ответ утвердительный, каталог appsbin присутствует. Чтобы проверить, установлен ли бит suid, примените:
– rwsr-x--- 1 root root 28 Apr 30 13:12 xab
$ [ -u xab ]
$ echo $?
0
Из этого примера следует, что бит suid установлен.
17.2. Применение логических операторов при осуществлении проверки
Итак, проверка прав доступа к файлу была осуществлена, но иногда возникает необходимость в сравнении различных прав доступа. Чтобы реализовать подобную проверку интерпретатор shell предлагает три типа логических операторов;
– a
Логическое AND, возвращает истину, если обе части оператора принимают истинное значение
– o
Логическое OR, возвращает истину, если какая-либо из частей оператора может принимать истинное значение
!
Логическое NOT, возвращает истину, если условие ложно
А теперь выполним сравнение следующих файлов:
– rw-r--r-- 1 root root 0 May 15 11:29 scores.txt
– rwxr-xr—- 1 root root 0 May 15 11:49 results.txt
В следующем примере проверяется, установлены ли для файлов права чтения.
$ [ -w results.txt -a -w scores.txt ]
$ echo $?
0
Ответ звучит утвердительно.
Чтобы проверить, установлены ли для какого-либо из файлов права выполнения, воспользуйтесь логическим оператором OR.
$ [ -х results.txt -о -x scores.txt ]
$ echo $?
0
Файл scores.txt не является исполняемым, а файл results.txt — исполняемый. Чтобы проверить, установлены ли для файла results.txt права записи и выполнения, примените следующую команду:
$ [ -w results.txt -a -x results.txt ]
$ echo $?
0
В данном случае получается утвердительный ответ.
17.3. Проверка строк
Проверка строк является важным этапом при отслеживании ошибок. Значение этого этапа повышается, если проверяются вводимые пользователями данные либо выполняется сравнение переменных. Чтобы проверить строки, достаточно выбрать один из пяти форматов.