Skip to main content

Как использовать условия тестирования в скрипте Bash

ДЕЛАЕМ СВОЙ СКРИПТ! (Апрель 2025)

ДЕЛАЕМ СВОЙ СКРИПТ! (Апрель 2025)
Anonim

Команда тестирования может использоваться в командной строке Linux для сравнения одного элемента с другим, но чаще используется в сценариях оболочки BASH как часть условных операторов, которые управляют логикой и потоком программ.

Основной пример

Вы можете попробовать эти команды, просто открыв окно терминала.

test 1 -eq 2 && echo "yes" || эхо "нет"

Вышеуказанная команда может быть разбита следующим образом:

  • test - Это значит, что вы собираетесь выполнить сравнение
  • 1 - Первый элемент, который вы собираетесь сравнить
  • -eq - Как вы сравниваете. В этом случае вы проверяете, равно ли одно число другому.
  • 2 - Элемент, по которому вы сравниваете первый элемент, против
  • && - Запустить следующую инструкцию, если результат верен
  • echo «yes» - команда запуска, если сравнение возвращает true
  • || - Запустите следующий оператор, если результат равен false
  • echo "no" - команда запуска, если сравнение возвращает false

По сути, команда сравнивает 1 к 2, и если они совпадают, выполняется эхо-оператор «да», который отображает «да», и если они не совпадают, выполняется оператор эха «нет», который отображает «нет».

Сравнение номеров

Если вы сравниваете элементы, которые анализируют как числа, вы можете использовать следующие операторы сравнения:

  • -eq - значение 1 равное значение 2
  • -ge - значение 1 больше или равно значению 2
  • -gt - значение 1 больше значения 2
  • -le - значение 1 меньше или равно значению 2
  • -lt - значение 1 меньше значения 2
  • -ne - значение 1 не равно значению 2

Примеры

test 1 -eq 2 && echo "yes" || эхо "нет"

(отображает «нет» на экране, потому что 1 не равен 2)

test 1 -ge 2 && echo "yes" || эхо "нет"

(отображает «нет» на экране, потому что 1 не больше или равно 2)

test 1 -gt 2 && echo "yes" || эхо "нет"

(отображает «нет» на экране, потому что 1 не больше 2)

test 1 -le 2 && echo "yes" || эхо "нет"

(отображает «да» на экран, потому что 1 меньше или равно 2)

test 1 -lt 2 && echo "yes" || эхо "нет"

(отображает «да» на экран, потому что 1 меньше или равно 2)

test 1 -ne 2 && echo "yes" || эхо "нет"

(отображает «да» на экран, потому что 1 не равен 2)

Сравнение текста

Если вы сравниваете элементы, которые анализируются как строки, вы можете использовать следующие операторы сравнения:

  • = - строка string соответствует строке 2
  • ! = - строка 1, отличная от строки 2
  • -n - длина строки больше 0
  • -z - длина строки 0

Примеры

test "string1" = "string2" && echo "yes" || эхо "нет"

(отображает «нет» на экране, потому что «string1» не равно «string2»)

test "string1"! = "string2" && echo "yes" || эхо "нет"

(отображает «да» на экран, потому что «строка1» не соответствует «string2»)

test -n "string1" && echo "yes" || эхо "нет"

(отображает «да» на экран, потому что «строка1» имеет длину строки больше нуля)

test -z "string1" && echo "yes" || эхо "нет"

(отображает «нет» на экране, потому что «строка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 && echo "yes"

(Если файл1 более новый, чем файл2, тогда будет отображаться слово «да»)

test -e / path / to / file1 && echo "yes"

(если файл1 существует, будет отображаться слово «да»)

test -O / path / to / file1 && echo "yes"

(если у вас есть файл1, тогда отображается слово «да» »)

терминология

  • Блок специальный - файл является блочным устройством, что означает, что данные считываются в байтах. Обычно это файлы устройств, такие как жесткие диски.
  • Специальный символ. Файл записывается сразу после его записи и обычно является устройством, таким как последовательный порт

Сравнение нескольких условий

До сих пор все сравнивало одно с другим, но что, если вы хотите сравнить два условия?

Например, если у животного 4 ноги и идет «moo», это, вероятно, корова. Просто проверка на 4 ноги не гарантирует, что у вас есть корова, но проверка звука, который она делает, конечно.

Чтобы проверить оба условия сразу, используйте следующую инструкцию:

test 4 -eq 4 -a "moo" = "moo" && echo "это корова" || эхо "это не корова"

Ключевая часть здесь - это -а, что означает а также .

Существует лучший и наиболее часто используемый способ проведения одного и того же теста, а именно:

test 4 -eq 4 && test "moo" = "moo" && echo "это корова" || эхо "это не корова"

Еще один тест, который вы, возможно, захотите сделать, - это сравнение двух операторов, и если значение true, выведите строку. Например, если вы хотите проверить, существует ли файл с именем «file1.txt» или существует файл с именем «file1.doc», вы можете использовать следующую команду:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 не существует"

Ключевой частью здесь является -o, что означает или же .

Существует лучший и наиболее часто используемый способ проведения одного и того же теста, а именно:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 не существует"

Исключение тестового ключевого слова

На самом деле вам не нужно использовать тест слова для сравнения. Все, что вам нужно сделать, - заключить оператор в квадратные скобки следующим образом:

-e file1.txt && echo "file1 exists" || echo "file1 не существует"

И в основном означает то же, что и тест.

Теперь вы знаете это, вы можете улучшить сравнение нескольких условий следующим образом:

4 -eq 4 && "moo" = "moo" && echo "это корова" || эхо "это не корова"-e file1.txt || -e file1.doc && echo "file1 exists" || echo "file1 не существует"

Резюме

Команда тестирования более полезна в сценариях, потому что вы можете проверить значение одной переменной на другую и управлять потоком программы. В стандартной командной строке вы можете использовать его для проверки наличия файла или нет.