Последние новости:

Поиск по сайту:

От терпения — опытность, от опытности — надежда (Сенека Старший).

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

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

 

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

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

#!/bin/bash

VAR1="AndreyEx"
VAR2="AndreyEx"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Строки равны."
else
    echo "Строки не равны."
fi

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

Строки равны.

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

#!/bin/bash

read -p "Введите первую строку: " VAR1
read -p "Введите вторую строку: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Строки равны."
else
    echo "Строки не равны."
fi

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

Введите первую строку: AndreyEx
Введите вторую строку: Ubuntu
Строки не равны.

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

[[ "string1" == "string2" ]] && echo "Равны" || echo "Не равны"
Не равны

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

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

#!/bin/bash

VAR='GNU / Linux - это операционная система'
if [[ $VAR == *"Linux"* ]]; then
  echo "Здесь присутствует"
fi

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

Здесь присутствует

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

#!/bin/bash

VAR='GNU / Linux - это операционная система'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "Здесь присутствует"
fi

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

 

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

#!/bin/bash

VAR=''
if [[ -z $VAR ]]; then
  echo "Строка пуста."
fi
Строка пуста.
#!/bin/bash

VAR=='AndreyEx'
if [[ -n $VAR ]]; then
  echo "Строка не пуста."
fi
Строка не пуста.

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

#!/bin/bash

VAR="Arch Linux"

case $VAR in

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

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

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

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

#!/bin/bash

VAR1="AndreyEx"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} лексикографически больше, чем ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} лексикографически больше, чем ${VAR1}."
else
    echo "Строки равны"
fi

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

Ubuntu лексикографически больше, чем AndreyEx.

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Jhonston

Либо ошибка в синтаксисе, либо какая-то опечатка, но если запустить скрипт, как на примере
из раздела «Сравнение строк с помощью оператора Case», то выводит две ошибки. (os Debian 10))

Nick

$ if [‘a’ == ‘b’] then echo ‘equal’ else echo ‘not equal’ fi

> bash: syntax error: unexpected end of file

Что я неправильно пишу? И почему в комментарии не работает перенос строки? )

Читайте также

3
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close