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

How to Compare Strings in Bash

17 Мая 2020 | Терминал

Это руководство описывает, как сравнивать строки в Bash.

Как сравнивать строки в 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 не разделяет переменные по «типу», переменные обрабатываются как целое число или строка в зависимости от контекста.

Проверьте, равны ли две строки

В большинстве случаев при сравнении строк вы хотите проверить, равны ли строки или нет.

Следующий скрипт использует оператор if и команду test, [ чтобы проверить, совпадают ли строки с = оператором:

#!/bin/bash

VAR1="Baksdev"
VAR2="Baksdev"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi
 

Когда скрипт выполняется, он напечатает следующий вывод.

Strings are equal.
 


Вот еще один скрипт, который принимает входные данные от пользователя и сравнивает заданные строки. В этом примере мы будем использовать [[ команду и == оператор.

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi
 

Запустите скрипт и введите строки при появлении запроса:

Enter first string: Baksdev
Enter second string: Ubuntu
Strings are not equal.
 


Вы также можете использовать логические и && и или || для сравнения строк:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
 
Not equal
 


Проверьте, содержит ли строка подстроку

Есть несколько способов проверить, содержит ли строка подстроку.

Один из подходов заключается в использовании подстроки с символами звездочки, * что означает совпадение всех символов.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi
 

Скрипт отобразит следующее:

It's there.
 

Другой вариант - использовать оператор регулярного выражения, =~ как показано ниже:

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi
 

Точка, за которой следует звездочка, .* соответствует нулю или большему количеству вхождений любого символа, кроме символа новой строки.


Проверьте, пуста ли строка

Довольно часто вам также необходимо проверить, является ли переменная пустой строкой или нет. Вы можете сделать это, используя -n и -z оператор.

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "String is empty."
fi
 
String is empty.
 
#!/bin/bash

VAR='Baksdev'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi
 
String is not empty.
 


Сравнение строк с помощью оператора Case

Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "Baksdev matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac
 
Baksdev matched.
 


Лексикографическое сравнение

Лексикографическое сравнение - это операция, в которой две строки сравниваются в алфавитном порядке путем сравнения символов в строке последовательно слева направо. Этот вид сравнения используется редко.

Следующие сценарии сравнивают две строки лексикографически:

#!/bin/bash

VAR1="Baksdev"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} is lexicographically greater than ${VAR1}."
else
    echo "Strings are equal"
fi
 

Скрипт выведет следующее:

Ubuntu is lexicographically greater than Baksdev.
 


Вывод 

Сравнение строк - одна из самых основных и часто используемых операций в сценариях Bash. Прочитав этот урок, вы должны хорошо понимать, как сравнивать строки в Bash. Вы также можете проверить наше руководство о конкатенации строк .


    Комментарии

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

Загрузка комментариев...