Чтобы проверить, установлено ли право записи для файла 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. Проверка строк
Проверка строк является важным этапом при отслеживании ошибок. Значение этого этапа повышается, если проверяются вводимые пользователями данные либо выполняется сравнение переменных. Чтобы проверить строки, достаточно выбрать один из пяти форматов.
test "строка"
test оператор_строки "строка"
test "строка" оператор_строки "строка"
[ оператор_строки строка ]
[ строка оператор_строки строка ]
Здесь в качестве выражения оператор_строки могут использоваться следующие операторы:
== Две строки равны
!= Две строки не равны
-z Эта строка нулевая
-n Эта строка не является нулевой
Чтобы проверить, присвоено ли переменной среды editor нулевое значение, примените команду:
$ [ -х $EDITOR ]
$ echo $?
1
Ответ отрицательный. Присвоено ли этой переменной значение vi?
$ [ $EDITOR= "vi" ]
$ echo $?
0
Ответ утвердительный. Отобразим это значение на экране:
$ echo $EDITOR
vi
Проверить, равны ли значения переменных таре и таре2, можно, воспользовавшись следующей командой:
$ TAPE="/dev/rmt0"
$ TAPE2="/dev/rmt1"
$ [ "$TAPE" = "$ТАРЕ2" ]
$ echo $?
1
Ответ отрицательный. При присваивании переменных необязательно применять двойные кавычки. Но при сравнении строк использование двойных кавычек является непременным условием.
Чтобы проверить "неравенство" переменных таре и таре2, примените следующую команду:
$ [ »$TAPE" != "$ТАРЕ2" ]
$ echo $?
0
Значения этих переменных не равны.