Содержание
Команду test можно использовать в командной строке Linux для сравнения одного элемента с другим, но она чаще используется в сценариях оболочки BASH как часть условных операторов, управляющих логикой и ходом программы.
Основной пример
Вы можете попробовать эти команды, просто открыв окно терминала.
тест 1-экв 2 эхо "да" || эхо "нет"
Вышеприведенная команда может быть разбита следующим образом:
- test — это означает, что вы собираетесь выполнить сравнение
- 1 — первый элемент, который вы собираетесь сравнить
- -eq — Как вы сравниваете. В этом случае вы проверяете, равно ли одно число другому.
- 2 — Элемент, с которым вы сравниваете первый элемент
- — Выполните следующую инструкцию, если результат верен
- echo «yes» — команда для запуска, если сравнение возвращает true
- || — Запустите следующую инструкцию, если результат ложен
- echo «no» — команда для запуска, если сравнение возвращает false
По сути, команда сравнивает от 1 до 2, и, если они совпадают, выполняется оператор echo «yes», который отображает «yes», а если они не совпадают, выполняется оператор echo «no», который отображает «no».
Сравнение чисел
Если вы сравниваете элементы, которые анализируются как числа, вы можете использовать следующие операторы сравнения:
- -eq — делает значение 1 равным значению 2
- -ge — значение 1 больше или равно значению 2
- -gt — значение 1 больше значения 2
- -le — значение 1 меньше или равно значению 2
- -lt — значение 1 меньше значения 2
- -ne — значение 1 не равно значению 2
Примеры
тест 1-экв 2 эхо "да" || эхо "нет"
(отображает «нет» на экране, потому что 1 не равно 2)
тест 1-2 эхо "да" || эхо "нет"
(отображает «нет» на экране, потому что 1 не больше или равно 2)
тест 1 -гт 2 эхо "да" || эхо "нет"
(на экране отображается «нет», потому что 1 не больше 2)
тест 1-ле 2 эхо "да" || эхо "нет"
(отображает «да» на экране, потому что 1 меньше или равно 2)
тест 1-лт 2 эхо "да" || эхо "нет"
(отображает «да» на экране, потому что 1 меньше или равно 2)
тест 1 -не 2 эхо "да" || эхо "нет"
(отображает «да» на экране, потому что 1 не равно 2)
Сравнение текста
Если вы сравниваете элементы, которые анализируются как строки, вы можете использовать следующие операторы сравнения:
- = — соответствует ли строка 1 строке 2
- != — строка 1 отличается от строки 2
- -n — длина строки больше 0
- -z — длина строки 0
Примеры
test "string1" = "string2" эхо "да" || эхо "нет"
(выводит «no» на экран, потому что «string1» не равно «string2»)
test "string1"! = "string2" эхо "да" || эхо "нет"
(выводит «yes» на экран, потому что «string1» не равно «string2»)
test -n "string1" эхо "да" || эхо "нет"
(отображает «да» на экране, потому что «строка1» имеет длину строки больше нуля)
test -z "string1" эхо "да" || эхо "нет"
(отображает «нет» на экране, потому что «строка1» имеет длину строки больше нуля)
Сравнение файлов
Если вы сравниваете файлы, вы можете использовать следующие операторы сравнения:
- -ef — У файлов одинаковые номера устройств и индексов (это один и тот же файл)
- -NT — первый файл новее, чем второй файл
- -ot — первый файл старше, чем второй файл
- -b — файл существует и является специальным блоком
- -c — файл существует и является символьным
- -d — файл существует и является каталогом
- -e — файл существует
- -f — файл существует и является обычным файлом
- -g — файл существует и имеет указанный номер группы
- -G — файл существует и является владельцем группы пользователей
- -h — файл существует и является символической ссылкой
- -k — файл существует, и в нем установлен липкий бит
- -L — так же, как -h
- -O — файл существует, вы являетесь владельцем
- -p — файл существует и является именованным каналом
- -r — файл существует и доступен для чтения
- -s — файл существует и имеет размер больше нуля
- -S — файл существует и является сокетом
- -t — дескриптор файла открывается на терминале
- -u — файл существует и бит set-user-id установлен
- -w — файл существует и доступен для записи
- -x — файл существует и является исполняемым
Примеры
test / path / to / file1 -nt / path / to / file2 эхо "да"
(Если файл1 новее, чем файл2, то будет отображаться слово «да»)
test -e / path / to / file1 эхо "да"
(если файл1 существует, будет отображено слово «да»)
test -O / path / to / file1 эхо "да"
(если у вас есть файл1, тогда появится слово «да»)
терминология
- Специальный блок — файл является блочным устройством, что означает, что данные читаются в байтах. Обычно это файлы устройств, такие как жесткие диски.
- Специальный символ — файл обрабатывается сразу же, когда вы пишете в него, и обычно это устройство, такое как последовательный порт
Сравнение нескольких условий
До сих пор все сравнивали одно с другим, но что, если вы хотите сравнить два условия?
Например, если животное имеет 4 ноги и говорит «му», это, вероятно, корова. Простая проверка на 4 ноги не гарантирует, что у вас есть корова, но проверка звука, который она делает, обязательно делает.
Чтобы проверить оба условия сразу, используйте следующее утверждение:
test 4 -eq 4 -a "moo" = "moo" эхо "это корова" || эхо "это не корова"
Ключевой частью здесь является -a, который обозначает и.
Существует лучший и наиболее часто используемый способ выполнения одного и того же теста, а именно:
тест 4 -экв 4 test "moo" = "moo" эхо "это корова" || эхо "это не корова"
Еще один тест, который вы, возможно, захотите сделать, — это сравнение двух операторов и, если они верны, выведите строку Например, если вы хотите проверить, существует ли файл с именем «file1.txt» или существует файл с именем «file1.doc», вы можете использовать следующую команду:
test -e file1.txt -o -e file1.doc эхо "файл1 существует" || echo "file1 не существует"
Ключевой частью здесь является -o, который обозначает или.
Существует лучший и наиболее часто используемый способ выполнения одного и того же теста, а именно:
test -e file1.txt || test -e file1.doc эхо "файл1 существует" || echo "file1 не существует"
Исключение тестового ключевого слова
Вам на самом деле не нужно использовать слово test для сравнения. Все, что вам нужно сделать, это заключить утверждение в квадратные скобки следующим образом:
[-e file1.txt] эхо "файл1 существует" || echo "file1 не существует"
[И] в основном означает то же самое, что и test.
Теперь вы знаете, что вы можете улучшить сравнение нескольких условий следующим образом:
[4 -экв. 4] ["moo" = "moo"] эхо "это корова" || эхо "это не корова"
[-e file1.txt] || [-e file1.doc] эхо "файл1 существует" || echo "file1 не существует"
Резюме
Команда test более полезна в сценариях, поскольку вы можете проверить значение одной переменной относительно другой и управлять потоком программ. В стандартной командной строке вы можете использовать ее, чтобы проверить, существует файл или нет.