Задать вопрос
@Div100

Как сравнить 2 числа на bash?

я могу сравнить 2 числа, типо:
if [ $a -eq $b ]

но почему у меня валятся всякие ошибки если я хочу, что-то типо этого if (a+1 == b)
if [ $(($a+ 1)) -eq $b]
if [ $a + 1-eq $b ]
if ["$a" + 1 -eq $b]

как оно вообще работает
  • Вопрос задан
  • 11504 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
nathanael
@nathanael
Интересующийся новичок.
Чтобы выполнять арифметические операции можно использовать инструкцию let (встроена в bash):
$ let "a=2+2"
$ echo $a
4

Для сравнения используется оператор (( :
$ if (( $a > 2 )); then echo "Bigger"; else echo "smaller"; fi
Bigger

Почитайте нетленку Advanced Bash scripting guide (на русском).

Другой пример:
$ if (( $a+2 > 6 )); then echo "Bigger"; else echo "smaller or equal"; fi
smaller or equal

Также в выражениях всегда нужно следить чтобы перед и до оператора вроде [[ или (( в словиях был пробел, иначе баш будет воспринимать их как другие лексемы (слитно с предыдущим словом, например как вызов других команд).

Можно сказать что операторы [, [[ это аналоги команды test, а (( это синоним let или утилиты expr.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
потому что [ ] это не группировка команд, а команда test, внутри которой не нужно выполнять bash команды.
Выполняйте вычисления за пределами, и берите все переменные в кавычки.

a=5
b=6
По вашим примерам:
#if [ $(($a+ 1)) -eq $b]
#не хватает пробела перед ]
if [ $(($a + 1)) -eq $b ]; then echo Yes; fi

#if [ $a + 1-eq $b ]
#if ["$a" + 1 -eq $b]
Так нельзя, и с пробелами лишнее
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
[guest@localhost ~]$ a=1
[guest@localhost ~]$ b=2
[guest@localhost ~]$ c=3
[guest@localhost ~]$ 
[guest@localhost ~]$ [ $((a + b)) -eq $c ]
[guest@localhost ~]$ echo $?
0
[guest@localhost ~]$ [ $((a + b)) -lt $c ]
[guest@localhost ~]$ echo $?
1
[guest@localhost ~]$ [ $((a + b - 1)) -lt $c ]
[guest@localhost ~]$ echo $?
0
[guest@localhost ~]$ [ $((a + b)) -gt $c ]
[guest@localhost ~]$ echo $?
1
[guest@localhost ~]$ [ $((a + b + 1)) -gt $c ]
[guest@localhost ~]$ echo $?
0
[guest@localhost ~]$
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы