if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
return 1
fi
}
Выражения для проверки строк
В табл. 27.2 перечислены выражения, используемые для проверки строк.
Таблица 27.2. Выражения для проверки строк
Выражение
|
Истинно, если...
|
строка
|
Cтрока не пустая
|
-n строка
|
Длина строки больше нуля
|
-z строка
|
Длина строки равна нулю
|
строка1 = строка2
строка1 == строка2
|
строка1 и строка2 равны. Допускается использовать один или два знака «равно», но предпочтительнее два
|
строка1 != строка2
|
строка1 и строка2 не равны
|
строка1 > строка2
|
строка1 больше, чем строка2, в смысле алфавитной сортировки
|
строка1 < строка2
|
строка1 меньше, чем строка2, в смысле алфавитной сортировки
|
ВНИМАНИЕ
При использовании с командой test операторы > и < необходимо заключать в кавычки (или экранировать символом обратного слеша). Если этого не сделать, они будут интерпретироваться командной оболочкой как операторы перенаправления, что может привести к плачевным результатам. Обратите также внимание: в документации к командной оболочке bash утверждается, что порядок сортировки соответствует порядку алфавитной сортировки, определяемому текущими региональными настройками, но в действительности это не так. В версиях bash, вплоть до 4.0, используется порядок сортировки ASCII (POSIX).
Следующий сценарий демонстрирует применение выражений для проверки строк:
#!/bin/bash
# test-string: проверка значения строки
ANSWER=maybe
if [ -z "$ANSWER" ]; then
echo "There is no answer." >&2
exit 1
fi
if [ "$ANSWER" == "yes" ]; then
echo "The answer is YES."
elif [ "$ANSWER" == "no" ]; then
echo "The answer is NO."
elif [ "$ANSWER" == "maybe" ]; then
echo "The answer is MAYBE."
else
echo "The answer is UNKNOWN."
fi
В этом сценарии определяется константа ANSWER. Сначала сценарий проверяет, не является ли строка пустой. Если строка пустая, сценарий завершается с кодом 1. Обратите внимание на оператор перенаправления в команде echo. Он перенаправляет сообщение об ошибке «There is no answer» («Нет ответа») в стандартный вывод ошибок как «наиболее подходящий» для сообщений об ошибках. Если строка не пустая, сценарий сравнивает ее значение со строками «yes», «no» или «maybe». Проверки выполняются с использованием инструкции elif, которая является краткой формой записи для else if. Инструкция elif позволяет конструировать более сложные логические проверки.
Выражения для проверки целых чисел
В табл. 27.3 перечислены выражения, используемые для проверки целых чисел.
Таблица 27.3. Выражения для проверки целых чисел
Выражение
|
Истинно, если...
|
число1 -eq число2
|
число1 и число2 равны
|
число1 -ne число2
|
число1 и число2 не равны
|
число1 -le число2
|
число1 меньше или равно числу2
|
число1 -lt число2
|
число1 меньше, чем число2
|
число1 -ge число2
|
число1 больше или равно числу2
|
число1 -gt число2
|
число1 больше, чем число2
|
Следующий сценарий демонстрирует их применение:
#!/bin/bash
# test-integer: проверка целочисленного значения.
INT=-5
if [ -z "$INT" ]; then
echo "INT is empty." >&2
exit 1
fi
if [ $INT -eq 0 ]; then
echo "INT is zero."
else
if [ $INT -lt 0 ]; then
echo "INT is negative."
else
echo "INT is positive."
fi
if [ $((INT % 2)) -eq 0 ]; then
echo "INT is even."
else
echo "INT is odd."
fi
fi
Обратите внимание на то, как сценарий определяет четность (even) или нечетность (odd) целого числа. Он возвращает остаток от деления числа на 2, по значению которого можно судить о четности или нечетности числа.
Более современная версия команды test
Последние версии bash реализуют составную команду, которая действует как улучшенная замена для команды test. Она имеет следующий синтаксис:
[[ выражение ]]
где выражение возвращает истинное (true) или ложное (false) значение. Команда [[ ]] очень похожа на команду test (она поддерживает те же выражения), но добавляет новое выражение для проверки строк:
строка1 =~ регулярное_выражение
возвращающее истинное значение, если строка1 соответствует расширенному регулярному выражению. Это открывает широкие перспективы для решения таких задач, как проверка корректности данных. Предыдущий сценарий, демонстрирующий применение выражений проверки целых чисел, может завершиться с ошибкой, если константе INT присвоить любое значение, не являющееся целым числом. Для надежности сценарию необходима возможность убедиться, что константа действительно содержит целое число. Используя [[ ]] с оператором проверки строки =~, мы усовершенствуем его, как показано ниже:
Читать дальше