Linux больше или равно

Обновлено: 05.07.2024

При написании сценариев Bash вам часто нужно сравнивать две строки, чтобы проверить, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.

В этом руководстве описывается, как сравнивать строки в Bash.

Операторы сравнения

При сравнении строк следует учитывать несколько моментов:

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

Проверьте, равны ли две строки

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

Следующий сценарий использует оператор if и команду test [ чтобы проверить, совпадают ли строки с оператором = :

Когда сценарий будет выполнен, он напечатает следующий вывод.

Вот еще один сценарий, который принимает ввод от пользователя и сравнивает заданные строки. В этом примере мы будем использовать команду [[ и оператор == .

Запустите сценарий и введите строки при появлении запроса:

Вы также можете использовать логические и && и или || для сравнения строк:

Проверьте, содержит ли строка подстроку

Есть несколько способов проверить, содержит ли строка подстроку.

как показано ниже:

Точка, за которой следует звездочка .* Соответствует нулю или более вхождений любого символа, кроме символа новой строки.

Проверьте, пуста ли строка

Довольно часто вам также нужно будет проверить, является ли переменная пустой строкой или нет. Вы можете сделать это с помощью операторов -n и -z .

Сравнение строк с оператором Case

Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:

Лексикографическое сравнение

Следующие сценарии лексикографически сравнивают две строки:

Скрипт выдаст следующее:

Выводы

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

При написании сценариев на Bash не только опытные программисты, но и новички в области командного интерпретатора Bash сталкиваются с работой со строками. Наиболее часто это необходимо при считывании команд, вводимых пользователем в качестве аргументов для исполняемого сценария, а также при обработке текстовых файлов. И один из необходимых приёмов в таком случае — это сравнение строк.

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

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

Данные операции позволяют определить, являются ли сравниваемые строки одинаковыми:

Результат работы сценария:


При проверке на равенство с помощью команды test (синоним квадратным скобкам [ ]) учитываются все пунктуационные знаки и различия в регистре букв сравниваемых строк.

Некоторые особенности сравнения строк с шаблонами:

Например проверка строки bash на то, начинается ли она с символа y:

Результат выполнения кода:


Сценарий вывел 0 (ноль), так как мы потребовали вывести код ошибки последней выполненной инструкции. А код 0 означает, что сценарий выполнился без ошибок. И действительно — переменная $x содержит строку yandex, которая начинается с символа "y". В противном случае может писаться "1". Это довольно удобный способ отладки сценариев.

Сравнение строк по алфавиту на Bash

Задача усложняется при попытке определить, является ли строка предшественницей другой строки в последовательности сортировки по возрастанию. Люди, пишущие сценарии на языке командного интерпретатора bash, нередко сталкиваются с двумя проблемами, касающимися операций "больше" и "меньше" относительно сравнения строк Linux, у которых достаточно простые решения:

Во-первых, символы "больше" и "меньше" нужно экранировать, добавив перед ними обратный слэш (\), потому что в противном случае в командном интерпретаторе они будут расцениваться как символы перенаправления, а строки — как имена файлов. Это один из тех случаев, когда отследить ошибку достаточно сложно.

Что получится, если сравнить строки bash:


Как видно, один лишь символ "больше" в своём непосредственном виде привёл к неправильным результатам, хотя и не было сформировано никаких ошибок. В данном случае этот символ привёл к перенаправлению потока вывода, поэтому никаких синтаксических ошибок не было обнаружено и, как результат, был создан файл с именем hockey:


Для устранения этой ошибки нужно экранировать символ ">", чтобы условие выглядело следующим образом:

Тогда результат работы программы будет правильным:


Во-вторых, упорядочиваемые с помощью операторов "больше" и "меньше" строки располагаются иначе, чем это происходит с командой sort. Здесь проблемы сложнее поддаются распознаванию, и с ними вообще можно не столкнуться, если при сравнении не будет учитываться регистр букв. В команде sort и test сравнение происходит по разному:

Результат работы кода:


В команде test строки с прописными буквами вначале будут предшествовать строкам со строчными буквами. Но если эти же данные записать в файл, к которому потом применить команду sort, то строки со строчными буквами будут идти раньше:


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

Проверка строки на пустое значение

Сравнение с помощью операторов -z и -n применяется для определения наличия содержимого в переменной. Таким образом, вы можете найти пустые строки bash. Пример:

Результат работы кода:


В этом примере создаются две строковые переменные — val1 и val2. Операция -n определяет, имеет ли переменная val1 ненулевую длину, а -z проверяет val2 и val3 на нулевую. Примечательно то, что последняя не была определена до момента сравнения, но интерпретатор считает, что её длина всё же равна нулю. Такой нюанс следует учитывать при различных проверках сценариев. И, если нет уверенности в том, какое значение содержится в переменной и задано ли оно вообще, стоит проверить её с помощью оператора -n или -z и лишь затем использовать по назначению.

Стоит обратить внимание и на функцию -n. Если ей для проверки будет передана необъявленная или пустая переменная, будет возвращена истина, а не ложь. Для таких случаев следует заключать проверяемую строку (переменную) в двойные кавычки, чтобы выглядело это так:

Выводы

В представленных операциях сравнения строк Bash есть определённые нюансы, которые стоит понять для предотвращения ошибок работы сценариев. Но таких ситуаций на практике встречает много, поэтому запомнить все (и тем более, описать) не получится.

При сравнении строк в виде переменных их можно заключать в кавычки практически всегда, так как это считается правилом хорошего тона, а заодно и страхует от семантических ошибок.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Как сравнивать числа в оболочке Bash в Linux

(1 оценок, среднее: 5,00 из 5)

Как сравнивать числа в Bash

Операторы для Баш сравнения чисел

оператор что делает пример
-eq сравнить цифры в bash для равенства, возвращает 0, если равно if [ $a -eq $b ] then
-ge сравнения чисел в bash, если больше или равно. Результат возвращает 0, если больше или равно if [ $a -ge $b ] then
-gt сравнивает числа в bash, если больше. if [ $a -gt $b ] then
-le сравнивает числа в bash, если меньше или равно. if [ $a -le $b ] then
-lt сравнивает числа в bash, если меньше. if [ $a -lt $b ] then
-ne сравнивает числа в bash, если не равно или нет. if [ $a -ne $b ] then

Примеры в деталях операторов сравнения числа в Bash:

1. оператор -eq

Этот оператор сравнивает числа, будет проверять значение равно или нет. Если оно равно, то возвращается 0.

В приведенном выше примере мы взяли числа 2 и 3 в первый раз и система возвратила значение 1, однако, когда мы приняли одинаковые значения для а и б, переменная возвращает нулевое значение.

2. оператор -ge

Этот оператор сравнивает числа и проверяет значения на больше или равно. Если значение больше или равно, то он возвращаемое значение 0.

3. оператор -gt

Этот оператор сравнения чисел будет проверять число на большее. Если значение больше, то возвращает 0.

4. оператор -le

Этот оператор сравнения числа будет проверять значения на меньше или равно. Если оно меньше или равно, то возвращаемое значение 0.

5. оператор -lt

Этот оператор сравнения числа будет проверять значения на меньшее. Если число меньше, то возвращаемое значение 0.

6. оператор -ne

Этот оператор сравнения числа будет проверять значения на не равно. Если числа не равны, то возвращаемое значение равно 0.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как сравнивать строки в Bash

При написании сценариев Bash вам часто нужно сравнивать две строки, чтобы проверить, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.

Операторы сравнения

Операторы сравнения - это операторы, которые сравнивают значения и возвращают true или false. При сравнении строк в Bash вы можете использовать следующие операторы:

  • string1 = string2 и string1 == string2 - Оператор равенства возвращает true, если операнды равны.
    • Используйте = оператор с test [ командой.
    • Используйте == оператор с [[ командой для сопоставления с образцом.

    Ниже следует отметить несколько моментов при сравнении строк:

    • Пустое пространство должно быть использовано между бинарным оператором и операндами.
    • Всегда используйте двойные кавычки вокруг имен переменных, чтобы избежать каких-либо проблем с разделением слов или смещениями
    • Bash не разделяет переменные по «типу», переменные обрабатываются как целое число или строка в зависимости от контекста.

    Проверьте, равны ли две строки

    В большинстве случаев при сравнении строк вы хотите проверить, равны ли строки или нет.

    Следующий скрипт использует оператор if и команду test, [ чтобы проверить, совпадают ли строки с = оператором:

    Когда скрипт выполняется, он напечатает следующий вывод.


    Вот еще один скрипт, который принимает входные данные от пользователя и сравнивает заданные строки. В этом примере мы будем использовать [[ команду и == оператор.

    Запустите скрипт и введите строки при появлении запроса:


    Вы также можете использовать логические и && и или || для сравнения строк:


    Проверьте, содержит ли строка подстроку

    Есть несколько способов проверить, содержит ли строка подстроку.

    Один из подходов заключается в использовании подстроки с символами звездочки, * что означает совпадение всех символов.

    Другой вариант - использовать оператор регулярного выражения, =

    как показано ниже:

    Точка, за которой следует звездочка, .* соответствует нулю или большему количеству вхождений любого символа, кроме символа новой строки.


    Проверьте, пуста ли строка

    Довольно часто вам также необходимо проверить, является ли переменная пустой строкой или нет. Вы можете сделать это, используя -n и -z оператор.


    Сравнение строк с помощью оператора Case

    Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:


    Лексикографическое сравнение

    Лексикографическое сравнение - это операция, в которой две строки сравниваются в алфавитном порядке путем сравнения символов в строке последовательно слева направо. Этот вид сравнения используется редко.

    Следующие сценарии сравнивают две строки лексикографически:

    Скрипт выведет следующее:


    Вывод

    Сравнение строк - одна из самых основных и часто используемых операций в сценариях Bash. Прочитав этот урок, вы должны хорошо понимать, как сравнивать строки в Bash. Вы также можете проверить наше руководство о конкатенации строк .

    Читайте также: