Bash Site about Linux


Вернуться к оглавлению

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



Раньше при написании скриптов путался: где квадратные скобки, где круглые, где пробелы... Потом решил всё это дело изучить и классифицировать. И по мотивам статей с англоязычных сайтов получилось вот что:


Оператор Назначение К о н с т р у к ц и и
test [ … ] [[ … ]] (( … ))
-eq равно * * *
-ne неравно * * *
-gt больше * * *
-lt меньше * * *
-ge больше или равно * * *
-le меньше или равно * * *
= равно * * *
== равно (ASCII) * * * *
!= неравно * * * *
> больше (ASCII) * *
< меньше (ASCII) * *
>= больше или равно *
<= меньше или равно *
\> больше (ASCII) * *
\< меньше (ASCII) * *

В результате работы команд test, [ … ], [[ … ]] или (( … )) - переменной $? присваеваются значения:
0 - если выражение верно
или
1 - если выражение ложно.


Конструкция test

test <значение> -оператор <значение>
[shonty@~]$ test 27 -gt 5; echo $?
0
[shonty@~]$ test {27} \> 5; echo $?
0
При использование test с операторами \>, \<, числа более 10 необходимо заключать в фигурные скобки, иначе результат будет неверный:
[shonty@~]$ test 27 \> 5; echo $?
1
Также неверный результат будет, если не ставить обратный слэш "\" перед знаками неравенства.
[shonty@~]$ test {27} > 5; echo $?
1


Конструкция [ … ]

[ <значение> -оператор <значение> ]
NOTE  При составлении выражений 
      необходимо проставлять пробелы. 
[shonty@~]$ [ 27 -gt 5 ]; echo $?
0
[shonty@~]$ [ {27} \> 5 ]; echo $?
0
При использование [ … ] с операторами \>, \<, числа более 10 необходимо заключать в фигурные скобки, иначе результат будет неверный (с переменными и символами ASCII работает стабильно.):
[shonty@~]$ [ 27 \> 5 ]; echo $?
1


Конструкция [[ … ]]

[[ <значение> -оператор <значение> ]]
NOTE  При составлении выражений 
      необходимо проставлять пробелы. 
[shonty@~]$ [[ 27 -gt 5 ]]; echo $?
0
При использовании операторов < и >, при числовых значениях более 10 возможны ошибки. Заключение чисел в фигурные скобки ситуацию не исправляет (с переменными и символами ASCII работает стабильно).
[shonty@~]$ [[ 27 > 5 ]]; echo $?
1


Конструкция (( … ))

((<значение> -оператор <значение>))
При составлении выражений пробелы необязательны. С символами ASCII не работает
[shonty@~]$ ((27>5)); echo $?
0



Вернуться к оглавлению






Яндекс.Метрика
ВебСтолица.РУ: создай свой бесплатный сайт!  | Пожаловаться  
Движок: Amiro CMS