MyTetra Share
Делитесь знаниями!
Памятка по написанию скриптов на Bash, основные тезисы
Время создания: 25.09.2020 14:22
Раздел: Компьютер - Linux - Bash - Программирование на Bash
Запись: xintrea/mytetra_syncro/master/base/1601032972jc2ish26sz/text.html на raw.github.com

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


За каким-то хуем в Bash для сравнения чисел сделаны ублюдочные сравнения -eq и т.д.


А для работы со строкам - математические выражения =, != и т .д.


Нельзя использовать сравнение вида == при проверке значений переменных. Вместо двух знаков равно надо писать -eq (т. е. эквивалент). Это как-то связано с тем, что проверка через == может неправильно срабатывать если попытаться сравнить пустую строку с числом 0. По идее, пустая строка не должна равняться 0, но если сравнивать через ==, то может.


Функции умеют возвращать только числовые значения через конструкцию return. Однако написать условие if с вызовом функции так, чтобы проверить возвращаемое значение функции, не так то просто. Некоторые гуру говорят, что это невозможно. Поэтому условия с вызовом функции приходится писать так:



# Вызов функции

имяФункции аргумент1 аргумент2


# Получение значения, значение из функции должно передаваться методом echo

local result=$?


# Само условие

if [[ $result -eq '1' ]]; then

что-то сделать

fi



А в самой функции возврат значения нужно делать путем печати его на стандартный вывод. Так как код функции выполняется внутри вызова функции, то печать возвращаемого значения через echo не будет попадать на стандартный вывод.


Однако при таком сопособе передачи возвращаемых значений есть проблема: если программист захочет отладить функцию путем печати каких-то промежуточных значений внутри функции, у него ничего не получится (он их не увидит), и кроме того напечатанные строки повлияют на итоговое значение, возвращаемое функцией.


Согласно вышесказанному, надо проверять, чтобы везде в разрабатываемых скриптах, командное слово return использовалось только для выхода из функции, и ничего не возвращала. Возвращаемые значения надо писать через echo "abc", перед командным словом return.


В Bash используется инверсия бинарных значений. Истина обозначается 0, а ложь 1. В Bash часто используют системные консольные утилиты с названием true и false. Утилита true возвращает 0. А утилита false возвращает, согласно заявлениям гуру, некое значение, отличное от 0. Не 1, а именно какое-то значение, отличное от 0. Может быть 1, а может быть и нет. Но не 0. Поэтому как однозначно понять, что значение равно false, совершенно непонятно.



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