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

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

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

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

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

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

  • 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

<Сильные> Примеры

 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)

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

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

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

<Сильные> Примеры

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

(выводит «no» на экран, потому что «string1» не равно «string2»)

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

(выводит «yes» на экран, потому что «string1» не равно «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 ноги и говорит «му», это, вероятно, корова. Простая проверка на 4 ноги не гарантирует, что у вас есть корова, но проверка звука, который она делает, обязательно делает.

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

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

Ключевой частью здесь является -a, который обозначает и .

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

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

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

 test -e file1.txt -o -e file1.doc && echo "файл1 существует" || echo "файл1 не существует" 

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

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

 test -e file1.txt || test -e file1.doc && echo "файл1 существует" || echo "файл1 не существует" 

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

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

 [-e file1.txt] && echo "файл1 существует" || echo "файл1 не существует" 

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

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

 [4 -eq 4] && ["moo" = "moo"] && echo "это корова" || эхо "это не корова" 
[-e file1.txt] || [-e file1.doc] && echo "файл1 существует" || echo "файл1 не существует"

Резюме

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

Оцените статью
Solutics.ru
Добавить комментарий