Сегодня мы с вами поговорим о том, как писать более сложные конструкции на bash.
Bash является Тьюринг-полным языком, поэтому любой алгоритм который вы можете придумать может быть на нем реализован. Но по своему опыту скажу, что программировать на bash лишний раз не хочется. И всякий раз когда после паузы вы будете возвращаться к нему, вам придется учить его заново.
<aside> 💡
Programming on bash, is opposite of riding a bicycle — no matter how many times you learned it you will fail.
</aside>
Так как понять когда стоит перестать писать на bash и перейти на что-то более конвенциональное? Как сказал первый лектор этого курса “если вам нужно написать, что-то сложнее сортировки, то стоит поменять язык”.
Для того, что бы просто выставить значение в переменную используем оператор присваивания(=) не разделяя его пробелами
integer_var=1 # some integer variable
text_var=some_random_string_with_no_spaces # text variable **could** be assigned without bracets
text_var_2=You\\ can\\ separate\\ by\\ slashes
text_var_3="But try to always use bracets"
Для использования переменных в последующих выражениях разыменовывайте их с помощью $
integer_var_1=1
integer_var_2=$integer_var_1
echo $integer_var_2 # output is 1
Так же $ может быть использован, что бы присвоить результат выражения
integer_var_1=1
integer_var_2=2
integer_var_3=$((integer_var_1 + $integer_var_2))
echo $integer_var_3 # output is 3
В bash есть условный оператор if
if [ <condition> ]; then
# <if condition is true, do this>
elif [ <condition_2> ]; then
# <if condition_2 is true, do this>
# numerous of elif ...
else
# <if none of conditions is true, do this>
fi # you have to **always** finish your if statement with fi
Для того, что бы сравнивать значения в условиях существуют следующие “операторы”. В виду различий между тем как сравниваются строки и целые числа в начале операторы сравнения целочисленых переменных
-eq — истина при равенстве двух целых чисел