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

Написать комментарий