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

12 set 2022 3 min di lettura
Как сравнивать строки в Bash в Linux
Indice dei contenuti

Введение

При написании сценариев Bash часто необходимо сравнить две строки, чтобы увидеть, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.

В этом руководстве описывается, как сравнивать строки в Bash.

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

Операторы сравнения — это операторы, которые сравнивают значения и возвращают true или false. При сравнении строк в Bash вы можете использовать следующие операторы:

  • string1 = string2 и string1 == string2 — оператор равенства возвращает значение true, если операнды равны.
  • Используйте оператор = с test [
  • Используйте оператор == с командой [[ для сопоставления с образцом.
  • string1!= string2 — оператор неравенства возвращает true, если операнды не равны.
  • string1 =~ regex — оператор регулярного выражения возвращает true, если левый операнд соответствует правому расширенному регулярному выражению.
  • string1 > string2 — оператор «больше чем» возвращает значение true, если левый операнд больше правого операнда, отсортированного в лексикографическом (алфавитном) порядке.
  • string1 < string2 - Оператор меньше чем возвращает true, если правый операнд больше, чем правый, отсортированный по лексикографическому (алфавитному) порядку.
  • -z string — Истинно, если длина строки равна нулю.
  • -n string — Истинно, если длина строки не равна нулю.

Вот несколько моментов, на которые следует обратить внимание при сравнении строк:

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

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

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

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

#!/bin/bash

 VAR1="Noviello"
 VAR2="Noviello"

 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: Noviello
 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.

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

#!/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='Noviello'
 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 "Noviello matched"
 ;;

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

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

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

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

#!/bin/bash

 VAR1="Noviello"
 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 Noviello.

Вывод

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.