MyTetra Share
Делитесь знаниями!
Синтаксис сравнения в BASH скриптах - главные особенности
Время создания: 20.06.2022 09:07
Текстовые метки: linux, bash, синтаксис, сравнение, условие, число, строка, особенности
Раздел: Компьютер - Linux - Bash - Программирование на Bash
Запись: xintrea/mytetra_syncro/master/base/1655705256z8hpm77sxn/text.html на raw.github.com

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



Синтаксис условий


Так как механизм сравнения непосредственно связан с условиями, вначале нужно описать синтаксис и особенности написания условий. Исторически, в Bash имеется нескольколько способов написания условий, и в каждом из них есть свои особенности, которые стоит учитывать.


В общем случае, синтаксис условия следующий:



if условие

then

...

fi



либо



if условие

then

...

else

...

fi



Многие программисты, для удобства написания кода, оператор then помещают в одну строку if, вот так:



if условие; then

...

fi



Здесь следует обратить внимание на точку с запятой ";". По-сути, точка с запятой в Bash используется для разделения команд/операторов, написанных в одной строке. Здесь происходит то же самое. if условие - это один оператор, then - другой. Поэтому их, при написании в одну строку, следует писать через точку с запятой.



Примечание. Какой безумец придумал завершать блок условия оператором fi - это тема для отдельного исторического исследования. fi, как многим понятно, это if, только наоборот. Логично было бы и другие управляющие конструкции завершать их написанием задом-наперед, например цикл for завершать rof, цикл while завершать elihw. Хорошо, что с таким решением решили вовремя завязать и, как минимум, не продолжили эту странную традицию. А fi остался как анахронизм, свидетельствующий о том, что авторы Bash были большими оригиналами.



Итак, для написания условий в Bash используется оператор if. Однако для начала, чтобы правильно писать условия и понимать как они работают, нужно понять, как что из себя вообще представляет команда if.


Смысл в том, что оператор if не проверяет условие как таковое. Он проверяет код завершения списка команд, которые в нем прописаны. Если код завершения 0, то команды внутри условия будут выполнены. В противном случае команды не выполняются (либо выполняется ветка else, если таковая есть).


Другими словами, условие - это список тестирующих команд. Код завершения работы этих команд проверяется на равенство нулю. Ноль свидетельствует о том, что команды выполнились успешно (т. е. нет ошибок). Если было успешное завершение, это считается оператором if как True.



Таким образом, возникает пародоксальная ситуация: 0 в Bash - это True. Для современных программистов, которые привыкли, что 0 - это False, а не-ноль - это True, такое положение вещей выглядит дико, но таковы суровые реалии Bash. Здесь нужно понимать, что это всего лишь проблема интерпретации результата в конструкции if. Так исторически сложилось.





Сравнение чисел и сравнение строк в Bash


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




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

От какой фразы образован

Что обозначает

-eq

equal

равно

-ne

not equal

не равно

-gt

greater than

больше чем, >

-ge

greater than or equal

больше или равно, >=

-lt

less than

меньше чем, <

-le

less than or equal

меньше или равно, <=



Дописать...


Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования