Вы увидели, как работает команда [:, код выхода равен 0, если условие проверки истинно, и не равен 0, если проверка завершена неудачно. Вы знаете также, как проверить равенство строк с помощью команды [
[ -f
В сценариях можно увидеть проверку -f, помещенную в цикл, подобный приведенному ниже. Такой цикл проверяет все элементы, находящиеся в текущем рабочем каталоге (вскоре вы узнаете более подробно о циклах):
for filename in *; do
if [ -f $filename ]; then
ls -l $filename
file $filename
else
echo $filename is not a regular file.
fi
done
Можно выполнить инверсию условия, поместив оператор ! перед аргументами команды проверки. Например, условие [ ! –f
примечание
Поскольку команда test так широко применяется в сценариях, во многих версиях оболочки Bourne shell (включая версию bash) эта команда является встроенной. Это может ускорить выполнение сценариев, так как оболочке не приходится для каждой проверки запускать отдельную команду.
Существуют десятки операторов проверки, и все они попадают в одну из трех основных категорий: проверка файлов, проверка строк и арифметическая проверка. Интерактивное руководство info содержит всю необходимую документацию, однако страница руководства test(1) позволит быстрее навести справки. В следующих разделах приведены общие сведения об основных видах проверок.
Проверка файлов
Большинство проверок файлов, вроде -f, называется
• -e — возвращает значение true, если файл существует;
• -s — возвращает значение true, если файл непyстой.
Многие операции отслеживают тип файла, это значит, что они способны определить, является ли что-либо обычным файлом, каталогом или специальным устройством, как перечислено в табл. 11.1. Есть также несколько унарных операций, которые проверяют права доступа к файлу, как указано в табл. 11.2 (см. также обзор прав доступа в разделе 2.17).
Таблица 11.1. Операторы проверки типа файла
Оператор
Условие проверки
-f
Обычный файл
-d
Каталог
-h
Символическая ссылка
-b
Блочное устройство
-c
Символьное устройство
-p
Именованный канал
-s
Сокет
примечание
Команда test отслеживает символические ссылки (кроме варианта -h), то есть если ссылка link является символической ссылкой на обычный файл, проверка [ -f link ] возвратит код выхода 0 (true).
Таблица 11.2. Операторы проверки прав доступа к файлу
Оператор
Оператор
-r
Для чтения
-w
Для записи
-x
Исполняемый
-u
Setuid
-g
Setgid
-k
«Закрепленный»
Наконец, три
[
Результатом будет значение true, если у файла
Проверка строк
Вы уже видели бинарный строковый оператор =, который возвращает значение true, если его операнды равны. Оператор != возвращает значение true, если его операнды не равны. Вот еще два унарных строковых оператора:
• -z — возвращает значение true, если его аргумент пустой (условие [ -z "" ] возвратит значение 0);
• -n — возвращает значение true, если его аргумент непустой (условие [ -n "" ] возвратит значение 1).
Арифметическая проверка
Важно осознавать, что знак равенства (=) проверяет равенство
Таблица 11.3. Арифметические операции сравнения
Оператор
Возвращает значение true, если первый аргумент …
-eq
…равен второму
-ne
…не равен второму
-lt
…меньше второго
-gt
…больше второго
-le
…меньше второго или равен ему
-ge
…больше второго или равен ему