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

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

by itisgood

Сравнение строк – распространенная задача при работе со скриптами, пользовательским вводом или строковыми данными.

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

Стандартные инструменты Unix не предоставляют много возможностей для сравнения строк; традиционное лексическое сравнение (например, проверка одинаковой длины двух слов и сравнение каждого символа в отдельности) трудно эффективно реализовать в коде, и оно не так ценно для динамического языка, как Bash.

В этой статье описаны различные способы сравнения строк в Bash и несколько связанных с ними команд.

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

Мы можем использовать операторы сравнения с операторами bash if для сравнения двух строк.

Вот список операторов сравнения для работы со строками в оболочке bash.

Оператор Подробности
string1 == string2 Возвращает true, если обе строки равны.
string1 != string Возвращает true, если обе строки не равны.
string =~ regex Сравнить string 1 с регулярным выражением и везращает true
-z string Возвращает true, если длина заданной строки равна нулю (0)
-n string Возвращает true, если длина заданной строки не равна нулю

Теперь мы рассмотрим вышеупомянутые операторы сравнения по очереди на примерах.

Сравнение двух строк в Bash (==)

Если вам нужно проверить, равны ли две строки, используйте оператор ==.

Эти операторы сравнивают левый операнд с правым операндом и возвращают true, если они оба совпадают.

Давайте разберемся на примере.

В скрипте инициализируйте две переменные строкой.

Затем используйте оператор if, чтобы сравнить, равны ли обе строки или нет, используя оператор ==.

#!/usr/bin/env bash

STR1="Itisgood"

STR2="Itisgood"

if [ "$STR1" == "$STR2" ]

then

    echo "Both strings are equal"

else

    echo "Both strings are not equal"

fi
Запустите приведенный выше скрипт в оболочке bash и проверьте результаты.
Теперь измените значения обеих переменных на разные строки.
Затем повторите скрипт и посмотрите результаты.

Проверка неравенства двух строк (!=)

Иногда нам требуется проверить, не равны ли строки.
Чтобы проверить, не равны ли две строки, можно использовать оператор !=.
Давайте проверим это на примере:
#!/usr/bin/env bash

STR1="Itisgood"

STR2="HelloWorld"

##Check if both strings are not equal

if [ "$STR1" != "$STR2" ]

then

    echo "True, both strings are not equal"

else

    echo "False, both strings are equal"

fi
Запустите приведенный выше скрипт в оболочке bash и проверьте результаты.

Сравнение строк с помощью регулярного выражения

Мы также можем сравнивать строки с помощью регулярного выражения в скриптах bash.
При использовании сравнения строк с регулярным выражением в операторе if, вы всегда должны заключать его в кавычки [[ ]].
Приведенный ниже пример поможет вам проверить, содержит ли переменная строку, которая начинается с определенных букв.
#!/usr/bin/env bash

STR="TecAdmin"

if [[ "$STR" =~ ^Tec ]]
then
echo "Yes, the regular expression matches "
else
echo "Regular expression not matches "
fi
Давайте проверим это на другом примере.
В этом скрипте мы попросим пользователя ввести число.
Затем проверим, является ли введенное значение числом.
Число содержит цифры от 0 до 9.
#!/usr/bin/env bash

read -p "Input a number: " VAR

## Check if the input value is a number
if [[ "$VAR" =~ ^[0-9]+$ ]]
then
echo "Given input is a number"
else
echo "Sorry, input is not a number"
fi
Запустите приведенный выше скрипт  и введите данные, когда появится запрос.
Input a number: 12
Given input is a number
Снова запустите этот скрипт, но на этот раз введите нечисловое значение и посмотрите результаты.
Input a number: 1234a
Sorry, input is not a number

Проверим, не является ли строка пустой

Принимая ввод пользователя в скрипте оболочки, важно проверить, не пуста ли вводимая строка.
Для этого можно использовать команду -z, которая возвращает true, если строка пуста.
#!/usr/bin/env bash

read -p "Type anything: " VAR

if [[ -z $VAR ]]; then
echo "Empty string"
else
echo "You type: ${VAR}"
fi
Выполните приведенный выше скрипте в оболочке bash и просто нажмите Enter, когда появится запрос на ввод данных пользователем.
Type anything:
Empty string

Снова запустите приведенный выше скрипт и введите что-нибудь, когда появится запрос.

Type anything: itisgood
You type: itisgood

Заключение

В этом руководстве мы рассмотрели сравнение строк в скриптах bash.

Вы также можете проверить, является ли строка пустой.

Также приведен пример проверки того, является ли входное значение числом или нет.

см. также:

You may also like

Leave a Comment