- 7.3. Операции сравнения
- Операторы сравнения в UNIX shell
- Сравнение чисел
- Пример использования в IF
- Сравнение строк
- Пример использования в IF
- Несколько условий (логические операторы)
- Дополнительно
- Как написать IF в одну строку
- Арифметические операции
- Ошибка «Integer expression expected»
- Как сравнивать строки в Bash
- How to Compare Strings in Bash
- Это руководство описывает, как сравнивать строки в Bash.
- Операторы сравнения
- Проверьте, равны ли две строки
- Проверьте, содержит ли строка подстроку
- Проверьте, пуста ли строка
- Сравнение строк с помощью оператора Case
- Лексикографическое сравнение
- Вывод
- Как сравнить две строковые переменные в операторе » if » в Bash?
- 12 ответов
7.3. Операции сравнения
сравнение целых чисел
if [ «$a» -eq «$b» ]
if [ «$a» -ne «$b» ]
if [ «$a» -gt «$b» ]
больше или равно
if [ «$a» -ge «$b» ]
if [ «$a» -lt «$b» ]
меньше или равно
if [ «$a» -le «$b» ]
меньше или равно (внутри двойных круглых скобок)
больше (внутри двойных круглых скобок)
больше или равно (внутри двойных круглых скобок)
сравнение строк
if [ «$a» = «$b» ]
if [ «$a» == «$b» ]
if [ «$a» != «$b» ]
Этот оператор используется при поиске по шаблону внутри [[ . ]].
меньше, в смысле величины ASCII-кодов
if [[ «$a» if [ «$a» \ » необходимо экранировать внутри [ ].
больше, в смысле величины ASCII-кодов
if [[ «$a» > «$b» ]]
if [ «$a» \> «$b» ]
Обратите внимание! Символ «>» необходимо экранировать внутри [ ].
См. Пример 25-6 относительно применения этого оператора сравнения.
строка «пустая» , т.е. имеет нулевую длину
строка не «пустая» .
Оператор | Описание | Пример |
---|---|---|
-eq | [ $x -eq $y ] Равно. Для результат True необходимо, чтобы x был равен y. | [ 1 -eq 2 ] — False [ 3 -eq 3 ] — True |
-ne | [ $x -ne $y ] Не равно. Оператор обратный -eq. | [ 1 -ne 2 ] — True [ 3 -ne 3 ] — False |
-gt | [ $x -gt $y ] Больше. То есть проверяет больше ли x чем y. | [ 1 -gt 2 ] — False [ 3 -gt 3 ] — False [ 5 -gt 4 ] — True |
-lt | [ $x -lt $y ] Меньше. Проверяет, что число в левой части (x) меньше числа в правой (y) | [ 1 -lt 2 ] — True [ 3 -lt 3 ] — False [ 5 -lt 4 ] — False |
-ge | [ $x -ge $y ] Больше или равно. | [ 1 -ge 2 ] — False [ 3 -ge 3 ] — True [ 5 -ge 4 ] — True |
-le | [ $x -le $y ] Меньше или равно. | [ 1 -le 2 ] — True [ 3 -le 3 ] — True [ 5 -le 4 ] — False |
Пример использования в IF
if [ $x -eq $y ]
then
echo ‘true’
else
echo ‘false’
fi
Сравнение строк
Оператор | Описание | Пример |
---|---|---|
= | [ «$a» = «$b» ] Равно. То есть строка a равна строке b. | [ ‘linux’ = ‘windows’ ] — False [ ‘unix’ = ‘unix’ ] — True |
!= | [ «$a» != «$b» ] Не равно. Оператор обратный =. | [ ‘linux’ != ‘windows’ ] — True [ ‘unix’ != ‘unix’ ] — False |
= |
$b ]] Содержит.
То есть в строке a есть b.
Обратите внимание, что для данного оператора используются двойные квадратные скобки.
‘windows’ ]] — False
[[ ‘unix’ =
‘ni’ ]] — True
Оператор проверяет, является ли строка b с нулевым размером.
[ -z » ] — True
Оператор обратный -z.
[ -n » ] — False
Оператор проверяет, является ли строка b не пустой.
[ » ] — False
Оператор проверяет, существует ли файл $file.
[ -f » ] — False
Пример использования в IF
if [ «$a» = «$b» ]
then
echo ‘true’
elif [[ «$a» =
$b ]]
then
echo ‘true’
else
echo ‘false’
fi
Несколько условий (логические операторы)
Оператор | Описание | Пример |
---|---|---|
-a | [ $x -eq $y -a $z -le $w ] Логическое И. В данном примере, проверяет, что (x равно y) И (z меньше или равно w) | [ 1 -eq 2 -a 3 -le 4 ] — False [ 5 -eq 5 -a 3 -le 4 ] — True [ 5 -eq 5 -a 6 -le 4 ] — False |
-o | [ $x -ne $y -o $z -ge $w ] Логическое ИЛИ. В данном примере, проверяет, что (x не равно y) ИЛИ (z больше или равно w) | [ 1 -eq 2 -o 3 -le 4 ] — True [ 5 -eq 5 -o 3 -le 4 ] — True [ 5 -eq 5 -o 6 -le 4 ] — True [ 1 -eq 2 -o 6 -le 4 ] — False |
Дополнительно
Как написать IF в одну строку
if [ $x -ne 0 ]; then echo 1; fi
if [ $x -ne 0 -a $y -eq 1 ]; then echo 1; else echo 2; fi
Арифметические операции
Расчет можно выполнить одним из следующих методов:
sum=$(( $sum1 + $sum2 + $sum3 ))
sum=`expr $sum1 + $sum2 + $sum3`
* где операции могут быть следующие:
- + — сложение;
- — — вычитание;
- * — умножение;
- / — деление;
- % — остаток от деления;
- = — приравнивание.
Ошибка «Integer expression expected»
Чаще всего, возникает при попытках использовать не тот оператор, например для строки -le (который должен использоваться для числа).
Примеры неправильного использования операторов:
Источник
Как сравнивать строки в Bash
How to Compare Strings in Bash
Это руководство описывает, как сравнивать строки в Bash.
При написании сценариев Bash вам часто нужно сравнивать две строки, чтобы проверить, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.
Операторы сравнения
Операторы сравнения — это операторы, которые сравнивают значения и возвращают true или false. При сравнении строк в Bash вы можете использовать следующие операторы:
- string1 = string2 и string1 == string2 — Оператор равенства возвращает true, если операнды равны.
- Используйте = оператор с test [ командой.
- Используйте == оператор с [[ командой для сопоставления с образцом.
- string1 != string2 — Оператор неравенства возвращает true, если операнды не равны.
- string1 =
regex — Оператор регулярного выражения возвращает true, если левый операнд соответствует расширенному регулярному выражению справа.
- string1 > string2 — Оператор «больше чем» возвращает истину, если левый операнд больше правого, отсортированного по лексикографическому (алфавитному) порядку.
- string1 — Оператор less than возвращает true, если правый операнд больше правого, отсортированного по лексикографическому (алфавитному) порядку.
- -z string — Истина, если длина строки равна нулю.
- -n string — Истина, если длина строки не равна нулю.
Ниже следует отметить несколько моментов при сравнении строк:
- Пустое пространство должно быть использовано между бинарным оператором и операндами.
- Всегда используйте двойные кавычки вокруг имен переменных, чтобы избежать каких-либо проблем с разделением слов или смещениями
- Bash не разделяет переменные по «типу», переменные обрабатываются как целое число или строка в зависимости от контекста.
Проверьте, равны ли две строки
В большинстве случаев при сравнении строк вы хотите проверить, равны ли строки или нет.
Следующий скрипт использует оператор if и команду test, [ чтобы проверить, совпадают ли строки с = оператором:
Когда скрипт выполняется, он напечатает следующий вывод.
Вот еще один скрипт, который принимает входные данные от пользователя и сравнивает заданные строки. В этом примере мы будем использовать [[ команду и == оператор.
Запустите скрипт и введите строки при появлении запроса:
Вы также можете использовать логические и && и или || для сравнения строк:
Проверьте, содержит ли строка подстроку
Есть несколько способов проверить, содержит ли строка подстроку.
Один из подходов заключается в использовании подстроки с символами звездочки, * что означает совпадение всех символов.
Другой вариант — использовать оператор регулярного выражения, =
как показано ниже:
Точка, за которой следует звездочка, .* соответствует нулю или большему количеству вхождений любого символа, кроме символа новой строки.
Проверьте, пуста ли строка
Довольно часто вам также необходимо проверить, является ли переменная пустой строкой или нет. Вы можете сделать это, используя -n и -z оператор.
Сравнение строк с помощью оператора Case
Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:
Лексикографическое сравнение
Лексикографическое сравнение — это операция, в которой две строки сравниваются в алфавитном порядке путем сравнения символов в строке последовательно слева направо. Этот вид сравнения используется редко.
Следующие сценарии сравнивают две строки лексикографически:
Скрипт выведет следующее:
Вывод
Сравнение строк — одна из самых основных и часто используемых операций в сценариях Bash. Прочитав этот урок, вы должны хорошо понимать, как сравнивать строки в Bash. Вы также можете проверить наше руководство о конкатенации строк .
Источник
Как сравнить две строковые переменные в операторе » if » в Bash?
Я пытаюсь получить if заявление на работу в Баш (через Ubuntu):
я пробовал различные формы if заявление, используя [[«$s1» == «$s2»]] , и без кавычек, используя = , == и -eq , но я все равно получаю следующую ошибку:
Я просмотрел различные сайты и учебники и скопировал их, но это не работает-что я делаю не так?
в конце концов, я хочу сказать, если $s1 содержит $s2 , так как я могу это сделать?
Я только что отработал бит пробелов.. :/ Как сказать содержит?
но это не сработало.
12 ответов
Для сравнения строк использовать:
на a содержит b использовать:
(и обязательно добавьте пробелы между символами):
вам нужны пробелы:
вы должны быть осторожны, чтобы оставить пробел между знаком » [«и двойными кавычками, где переменная содержит это:
на ^ s показать пробелы, которые вам нужно оставить.
Я предлагаю вот это:
обратите внимание на пробел между открывающими / закрывающими скобками и переменными, а также пробелы, обертывающие знак»=».
кроме того, будьте осторожны в заголовке скрипта. Это не одно и то же, используете ли вы
без двойных кавычек и только с одним из равных.
этот вопрос уже имеет отличные ответы, но здесь, похоже, существует небольшая путаница между использованием одиночных равных и двойных равных в
основное различие заключается в том, какой язык сценариев вы используете. Если вы используете Баш включить #!/bin/bash в начале скрипта и сохранить скрипт как filename.bash . Для выполнения используйте bash filename.bash — тогда вы должны использовать == .
если вы используете ш затем использовать #!/bin/sh и сохраните свой скрипт как filename.sh . Для выполнения используйте sh filename.sh — тогда вы должны использовать один = . Не смешивая их.
У меня нет доступа к коробке linux прямо сейчас, но [ на самом деле это программа (и встроенный bash), поэтому я думаю, что вам нужно поместить пробел между [ и первым параметром.
также обратите внимание, что оператор равенства строк кажется одиночным =
Bash4+ примеры. Примечание: не использование кавычек вызовет проблемы, когда слова содержат пробелы и т. д.. Всегда цитируйте в bash IMO.
вот несколько примеров BASH4+:
Пример 1, Проверьте » да » в строке (без учета регистра):
Пример 2, Проверьте » да » в строке (с учетом регистра):
Пример 3, Проверьте » да » в строке (с учетом регистра):
Пример 4, Проверьте » да » в строке (case sensitive):
Пример 5, точное совпадение (с учетом регистра):
Пример 6, точное совпадение (без учета регистра):
Пример 7, точное совпадение:
Это больше вопросов, чем ответов ! Да, ключ находится в сообщении об ошибке:
Что показывает вам, что ваше «привет» было объединено с «[«.
В отличие от более традиционных языков программирования, в Bash, » [«- это команда, как и более очевидные «ls» и т. д. — он не обрабатывается специально только потому, что это символ, следовательно, » [«и (замещенный) «$s1», которые находятся непосредственно рядом с каждым другие в вашем вопросе соединяются (как правильно для Bash), а затем он пытается найти команду в этой позиции: [hi — которая неизвестна Bash.
В C и некоторых других языках «[» будет рассматриваться как другой «класс символов» и будет отличаться от следующего «hi».
следовательно, вам требуется пробел после открытия» [«.
добавить дополнительные строки внутри делает его более безопасным.
вы также можете использовать другие обозначения для однострочных команд:
для версии с pure Bash и без test , но действительно уродливый, попробуйте:
Пояснение: В ( ) открывается дополнительная подрешетка. Он выходит с 0, если было совпадение, и он пытается выйти с $s1, если не было совпадения, которое вызывает ошибку (уродливо). Эта ошибка направлена на /dev/null .
Источник