Linux. Команда test
Предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0
(истина) или 1
(ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.
test выражение
Для сокращения кода сценария используют парный оператор [
как синоним test
. Парный оператор требует пробела между скобками потому, что [
(скобка) является командой оболочки.
Проверка типа файла
-d file
— истина, еслиfile
существует и является каталогом-e file
— истина, еслиfile
существует-f file
— истина, еслиfile
существует и является обычным файлом-r file
— истина, еслиfile
существует и доступен для чтения-s file
— истина, еслиfile
существует и имеет размер больше, чем ноль-w file
— истина, еслиfile
существует и доступен для записи-x file
— истина, еслиfile
существует и доступен для выполнения-L file
— истина, еслиfile
существует и является символьной ссылкой-S file
— истина, еслиfile
существует и является сокетомfile1 -nt file2
— истина, еслиfile1
новее (дата модификации), чемfile2
file1 -ot file2
— истина, еслиfile1
старее, чемfile2
#!/bin/bash
if [ -f "$HOME/.bashrc" ]; then
echo "Файл существует!"
else
echo "Файл не существует!"
fi
Сравнение строк
-z string
— истина, если длинаstring
равна нулю-n string
— истина, если длинаstring
не нольstring1 = string2
— истина, если строки равныstring1 != string2
— истина, если строки не равны
Сравнение целых чисел
число1 -eq число2
— истина, есличисло1
равночисло2
число1 -gt число2
— истина, есличисло1
большечисло2
число1 -ge число2
— истина, есличисло1
больше или равночисло2
число1 -lt число2
— истина, есличисло1
меньшечисло2
число1 -le число2
— истина, есличисло1
меньше или равночисло2
число1 -ne число2
— истина, есличисло1
не равночисло2
#!/bin/bash
if [ 3 -lt 6 ]; then
echo "Истина"
else
echo "Ложь"
fi
Операции AND и OR
expr1 -a expr2
— истина, если оба выраженияexpr1
иexpr2
истина (операция AND)expr1 -o expr2
— истина, если хотя бы одно из выраженийexpr1
илиexpr2
истина (операция OR)! expr
— истина, если выражениеexpr
ложно
В условном выражении команды test
можно использовать круглые скобки, чтобы изменить порядок вычисления, но их нужно экранировать:
$ [ \( "$count" -ge 0 \) -a \( "$count" -lt 10 \) ]
«[[…]]
» — расширенный вариант от «[…]
», оболочка выполняет его как один элемент с кодом возврата. Внутри «[[…]]
» разрешается выполнение операторов &&
, ||
которые приводят к ошибке в обычных скобках «[…]
».
#!/bin/bash
if [[ -f "$HOME/.bashrc" && -f "/usr/bin/nano" ]]; then
echo "Все в порядке, можно редактировать!"
else
echo "Ошибка!"
fi