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

Содержание
Сравнение строк - распространенная задача при работе со сценариями оболочки, пользовательским вводом или строковыми данными. В командной оболочке вам может понадобиться проверить, существует ли значение в другой строке, определить, имеют ли две строки одинаковую длину, проверить начало или конец слова, или выполнить любой другой тип сравнения.
Стандартные инструменты Unix не предоставляют много возможностей для сравнения строк; традиционное лексическое сравнение (например, проверка одинаковой длины двух слов и сравнение каждого символа в отдельности) трудно эффективно реализовать в коде, и оно не так ценно для динамического языка, как Bash.
В этой статье описываются различные способы сравнения строк в Bash и несколько связанных с ними команд.
Операторы сравнения строк
Мы можем использовать операторы сравнения с операторами bash if для сравнения двух строк. Вот список операторов сравнения для работы со строками в оболочке bash.
Описание операторов:
string1 == string2 - Возвращает true, если обе строки равны.
string1 != string - Возвращает true, если обе строки не равны.
string =~ regex - Сравнить string1 с regex и вернуть истинные совпадения
-z string - Возвращает true, если длина заданной строки равна нулю (0)
-n string - Возвращает true, если длина заданной строки не равна нулю
Теперь мы рассмотрим вышеупомянутый оператор сравнения по очереди на примерах описанных ниже.
Сравнение двух строк в Bash (==)
Если вам нужно проверить, равны ли две строки, используйте оператор ==. Эти операторы сравнивают левый операнд с правым операндом и возвращают true, если оба совпадают.
Давайте разберемся на примере. В сценарии оболочки инициализируйте две переменные строкой. Затем используйте оператор if, чтобы сравнить, равны ли обе строки или нет, используя оператор ==.
#!/usr/bin/env bash
STR1="TecAdmin"
STR2="TecAdmin"
if [ "$STR1" == "$STR2" ]
then
echo "Both strings are equal"
else
echo "Both strings are not equal"
fi
Запустите приведенный выше сценарий оболочки в оболочке bash и проверьте результаты.
Output: Both strings are equal
Теперь измените значения обеих переменных на разные строки. Затем повторите сценарий и посмотрите результаты.
Проверка двух строк на неравенство (!=)
Иногда нам требуется проверить, не равны ли обе строки. Для проверки неравенства двух строк можно использовать оператор !=. Давайте проверим это на примере:
#!/usr/bin/env bash
STR1="TecAdmin"
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 и проверьте результаты.
Output: True, both strings are not equal
Сравнение строк с помощью регулярного выражения
Мы также можем сравнивать строку с регулярным выражением в сценариях 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
Output: Yes, the regular expression matches
Давайте проверим это на другом примере. В этом сценарии мы попросим пользователя ввести число. Затем проверим, является ли введенное значение числом или нет. Число содержит цифры от 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
Запустите приведенный выше сценарий bash и введите данные, когда появится запрос.
First run: Input a number: 12 Given input is a number
Снова запустите этот сценарий, но на этот раз введите нечисловое значение и посмотрите результаты.
Second run: 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, когда появится запрос на ввод данных пользователем.
First run: Type anything: Empty string
Заключение
В этом уроке мы рассмотрели сравнение строк в сценарии bash. Вы также можете проверить, является ли строка пустой или нет. Также приведен пример проверки того, является ли входное значение числом или нет.