Thank you for reading this post, don't forget to subscribe!
При написании сценариев Bash вам часто нужно сравнивать две строки, чтобы проверить, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.
Эта статья описывает, как сравнивать строки в Bash.
Операторы сравнения
Операторы сравнения – это операторы, которые сравнивают значения и возвращают true или false. При сравнении строк в Bash вы можете использовать следующие операторы:
- string1 = string2 и string1 == string2- Оператор равенства возвращает true, если операнды равны.
- Используйте =оператор с test командой [.
- Используйте ==оператор с командой [[ для сопоставления с образцом.
- string1 != string2 – Оператор неравенства возвращает true, если операнды не равны.
- string1 =~ regex- Оператор регулярного выражения возвращает true, если левый операнд соответствует расширенному регулярному выражению справа.
- string1 > string2 – Оператор «больше чем» возвращает истину, если левый операнд больше правого, отсортированного по лексикографическому (алфавитному) порядку.
- string1 < string2 – Оператор less than возвращает true, если правый операнд больше правого, отсортированного по лексикографическому (алфавитному) порядку.
- -z string – Истина, если длина строки равна нулю.
- -n string – Истина, если длина строки не равна нулю.
Ниже следует отметить несколько моментов при сравнении строк:
- Пустое пространство должно быть использовано между бинарным оператором и операндами.
- Всегда используйте двойные кавычки вокруг имен переменных, чтобы избежать каких-либо проблем с разделением слов или сбоев.
- Bash не разделяет переменные по «типу», переменные обрабатываются как целое число или строка в зависимости от контекста.
Проверьте, равны ли две строки
В большинстве случаев при сравнении строк вы хотите проверить, равны ли строки или нет.
Следующий скрипт использует команду [, чтобы проверить, совпадают ли строки с оператором =:
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash VAR1="AndreyEx" VAR2="AndreyEx" if [ "$VAR1" = "$VAR2" ]; then echo "Строки равны." else echo "Строки не равны." fi |
Когда скрипт выполнится, он выведет следующий вывод.
1 |
Строки равны. |
Вот еще один скрипт, который принимает входные данные от пользователя и сравнивает заданные строки. В этом примере мы будем использовать команду [[ и оператор ==.
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash read -p "Введите первую строку: " VAR1 read -p "Введите вторую строку: " VAR2 if [[ "$VAR1" == "$VAR2" ]]; then echo "Строки равны." else echo "Строки не равны." fi |
Запустите скрипт и введите строки при появлении запроса:
1 2 3 |
Введите первую строку: AndreyEx Введите вторую строку: Ubuntu Строки не равны. |
Вы также можете использовать логические и && и или || для сравнения строк:
1 |
[[ "string1" == "string2" ]] && echo "Равны" || echo "Не равны" |
1 |
Не равны |
Проверьте, содержит ли строка подстроку
Есть несколько способов проверить, содержит ли строка подстроку.
Один из подходов заключается в использовании подстроки с символами звездочки *, что означает совпадение всех символов.
1 2 3 4 5 6 |
#!/bin/bash VAR='GNU / Linux - это операционная система' if [[ $VAR == *"Linux"* ]]; then echo "Здесь присутствует" fi |
Скрипт отобразит следующее:
1 |
Здесь присутствует |
Другой вариант – использовать оператор регулярного выражения =~, как показано ниже:
1 2 3 4 5 6 |
#!/bin/bash VAR='GNU / Linux - это операционная система' if [[ $VAR =~ .*Linux.* ]]; then echo "Здесь присутствует" fi |
Точка, за которой следует звездочка .* соответствует нулю или большему количеству вхождений любого символа, кроме символа новой строки.
Проверьте, пуста ли строка
Довольно часто вам также необходимо проверить, является ли переменная пустой строкой или нет. Вы можете сделать это, используя оператор -n и -z.
1 2 3 4 5 6 |
#!/bin/bash VAR='' if [[ -z $VAR ]]; then echo "Строка пуста." fi |
1 |
Строка пуста. |
1 2 3 4 5 6 |
#!/bin/bash VAR=='AndreyEx' if [[ -n $VAR ]]; then echo "Строка не пуста." fi |
1 |
Строка не пуста. |
Сравнение строк с помощью оператора Case
Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash VAR="Arch Linux" case $VAR in "Arch Linux") echo -n "AndreyEx matched" ;; Fedora | CentOS) echo -n "Red Hat" ;; esac |
1 |
AndreyEx matched. |
Лексикографическое сравнение
Лексикографическое сравнение – это операция, в которой две строки сравниваются в алфавитном порядке путем сравнения символов в строке последовательно слева направо. Этот вид сравнения используется редко.
Следующие сценарии сравнивают две строки лексикографически:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash VAR1="AndreyEx" VAR2="Ubuntu" if [[ "$VAR1" > "$VAR2" ]]; then echo "${VAR1} лексикографически больше, чем ${VAR2}." elif [[ "$VAR1" < "$VAR2" ]]; then echo "${VAR2} лексикографически больше, чем ${VAR1}." else echo "Строки равны" fi |
Скрипт выведет следующее:
1 |
Ubuntu лексикографически больше, чем AndreyEx. |
Сравнение строк Bash
Вот как вы сравниваете строки в Bash.
1 |
if ["$ string1" == "$ string2"] |
Вы также можете использовать строку напрямую вместо использования переменной.
1 |
if ["$string1" == "Это моя строка"] |
Позвольте нам показать это вам на примерах.
Проверьте, равны ли две строки
Если вы хотите проверить, равны ли две строки, вот пример:
1 2 3 4 5 6 7 8 9 |
!/bin/bash string1="MyString" string2="MyString" if [ "$string1" == "$string2" ] then echo "Строки равны" else echo "Строки не равны" fi |
Проверьте, не равны ли строки в Bash
Вместо того, чтобы проверять качество, давайте сделаем обратное и проверим неравенство. Bash также предоставляет оператор отрицания, так что вы можете легко использовать условие «если не равно» в сценариях оболочки.
1 |
if ["$string1" != "Not MyString"] |
Полный пример выглядит так:
1 2 3 4 5 6 7 8 9 |
!/bin/bash string1="MyString" if [ "$string1" != "Not MyString" ] then echo "Строки не равны" else echo "Строки равны" fi |
Проверьте, является ли строка нулевой или пустой в Bash
В отличие от некоторых других языков, таких как C ++, в Bash вы можете проверить, является ли строка пустой или пустой с помощью одной команды:
1 |
if [ -z "$VAR" ] |
-z фактически проверяет, равна ли длина переменной нулю или нет. Если переменная не установлена или если она пустая (равна «»), длина будет равна нулю и, следовательно, условие вернет true.
Полный пример можно увидеть здесь:
1 2 3 4 5 6 7 8 9 10 11 |
!/bin/bash string1= string2="" if [ -z "$string1" ] then echo "Нулевая строка" fi if [ -z "$string2"] then echo "Строка пуста" fi |
Примечание об использовании одинарных скобок ‘[]’ и двойных скобок ‘[[]]’ в скриптах bash
Вы также можете использовать оператор if с двойными скобками, например так:
1 |
if [["$string1" == "Моя строка"]] |
Одиночная скобка – это старая конвенция Posix, и у нее есть некоторые недостатки. Если вы не используете двойные кавычки вокруг переменных, а переменная не определена, она исчезнет из кода и приведет к синтаксической ошибке.
1 |
if [$string1 == "Моя строка"] |
Если переменная $ string1 пуста или не определена в приведенном выше коде, эта строка станет эквивалентной
1 |
if [ == "$string2"] |