Здесь оболочка запускает команду
Конструкции && и || часто находят себе применение в проверках if, и в обоих случаях код выхода последней запущенной команды определяет то, как оболочка обработает условный оператор. В случае с конструкцией &&, если первая команда завершается неудачно, оболочка использует ее код выхода для инструкции if, но если первая команда завершена успешно, оболочка применяет для условного оператора код выхода второй команды. В случае с конструкцией || оболочка использует код выхода первой команды при ее успешном выполнении или код выхода второй команды, если первая завершила работу неудачно.
Например:
#!/bin/sh
if ["$1" = hi] || ["$1" = bye]; then
echo 'The first argument was "'$1'"'
fi
Если ваши условные операторы содержат команду проверки ([), как показано здесь, можно использовать символы — a и — o вместо конструкций && и ||, о чем рассказано в следующем разделе.
11.5.5. Проверка условий
Вы увидели, как работает команда [:, код выхода равен 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
«Закрепленный»
Наконец, три
[