Как сравнить строки в 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. Вы также можете проверить, является ли строка пустой или нет. Также приведен пример проверки того, является ли входное значение числом или нет.