Jelajahi Sumber

Загрузить файлы 'Лекции/Bash'

u21koval_nik 1 tahun lalu
induk
melakukan
1ca616d552
1 mengubah file dengan 214 tambahan dan 0 penghapusan
  1. 214 0
      Лекции/Bash/Bash Ковалев Никита.md

+ 214 - 0
Лекции/Bash/Bash Ковалев Никита.md

@@ -0,0 +1,214 @@
+# Интегрированная среда разработки Bash (Ковалев Никита 47 группа)
+__Bash__ (Bourne again shell) — это стандартная командная оболочка в большинстве дистрибутивов Linux и macOS, а также язык для этой оболочки.
+
+Bash создан Брайаном Фоксом и выпущен в 1989 году как open source замена для Bourne Shell, вышедшей в 1976 году. Его название является аббревиатурой от Bourne Again SHell.
+
+Язык Bash поддерживает переменные, массивы, циклы, функции, условные и арифметические операторы, операции ввода-вывода и другие средства. Но главная его фишка — возможность создавать скрипты для ускорения работы на компьютере и автоматизации рутины. Например, с их помощью можно:
+
+* быстро переименовывать все файлы в папке;
+* генерировать случайные пароли;
+* создавать и отправлять отчёты по электронной почте;
+* проверять и обновлять систему и приложения;
+* одной командой очищать кэш браузера.
+
+## Основы Bash: синтаксис, переменные и команды
+
+### Переменные
+
+Переменные в Bash объявляются просто:
+
+```
+message="Hello, World!"
+```
+
+Теперь переменная message хранит значение — текстовое сообщение «Hello, World!». 
+Вывести значение переменной можно с помощью команды __echo__:
+
+```
+echo $message
+```
+
+В Bash пробелы являются разделителями. Если пробелы есть, то Bash будет считать их отдельными токенами и выдавать ошибки.
+
+Следующий код приведёт к ошибке:
+
+```
+message = "Hello, World!"
+bash: message: command not found
+```
+Также обратите внимание на символ __$__ — в Bash он называется символом расширения (expansion character). Поставленный перед именем переменной, он указывает на то, что нужно использовать именно значение переменной, а не одноимённую строку.
+
+Следующий код выведет сообщение «message»:
+```
+message="Hello, World!"
+echo message
+```
+Чтобы сохранить в переменной введённое пользователем значение, используйте команду __read__:
+```
+read name
+# Пользователь вводит что-нибудь
+echo $name
+```
+Если вы хотите добавить сообщение перед пользовательским вводом, добавьте флаг __-p__ и сообщение после команды read:
+
+```
+read -p "Enter your name: " name # Будет выведено «Enter your name: »
+# Пользователь вводит что-то 
+echo $name
+```
+В Bash есть несколько правил именования переменных:
+
+* Имя переменной должно начинаться с буквы латинского алфавита (нижнего или верхнего регистра) или символа подчёркивания _.
+* Оно может включать буквы, цифры и символ подчёркивания, но не может содержать пробелы или специальные символы.
+* Регистр букв в именах переменных имеет значение. Например, переменные var1 и Var1 будут рассматриваться как разные.
+* Не рекомендуется использовать зарезервированные слова Bash в качестве имён переменных.
+
+### Типы данных
+
+Строки __(strings)__ — это набор символов, заключённый в кавычки. В Bash можно писать строки в одинарных '…' или двойных "…" кавычках. Например, 'Привет' и "Мир" — это строки.
+
+Числа __(numbers)__ — это целочисленные значения. Bash поддерживает арифметические операции с целыми числами, включая сложение, вычитание, умножение и деление. Арифметические выражения нужно предварять знаком $ и обрамлять двойными круглыми скобками:
+```
+a=2 b=3
+echo $(($a + $b)) # Будет выведено 5
+```
+Также можно использовать команду __expr__:
+```
+echo $(expr $a + $b)  # Будет выведено 5
+```
+Стандартные библиотеки Bash поддерживают следующие арифметические операции:
+
+* Сложение — +.
+* Вычитание — -.
+* Умножение — *.
+* Целочисленное деление — /.
+* Остаток от деления — %.
+* Возведение в степень — **.
+
+Массивы __(arrays)__ — тип переменных, который может хранить несколько значений. Элементы массива перечисляются в круглых скобках через пробел:
+```
+my_array=(apple banana cherry)
+```
+При использовании переменной массива в команде применяются фигурные скобки. Если мы хотим вывести его отдельные элементы, это можно сделать с помощью символа $ и номера индекса в квадратных скобках:
+```
+echo ${my_array[0]} # Выведет «apple»
+echo ${my_array[1]} # Выведет «banana»
+echo ${my_array[2]} # Выведет «cherry»
+```
+А если нам нужно получить сразу все элементы массива, вместо индекса в квадратных скобках нужно поставить символ __* или @__
+
+Логические значения __(boolean)__ — нужны для того, чтобы проверить, выполняется ли какое-то условие или нет. Они могут быть либо __true (истина)__, либо __false (ложь)__. Например, в операторах if и while мы пишем условие, и если оно true, то выполняем какое-то действие.
+
+В Bash логические значения представлены целыми числами. Число 0 означает true, а любое другое число означает false. Когда мы выводим логическое значение на экран, то вместо true мы видим 0.
+
+Также в Bash есть операторы сравнения. Например, эти нужны для строк:
+
+= проверяет, одинаковы ли две строки.
+!= проверяет, различаются ли две строки.
+А эти — для чисел:
+
+* __-eq__ проверяет, равны ли два числа.
+* __-ne__ проверяет, различаются ли два числа.
+* __-gt__ проверяет, больше ли первое число, чем второе.
+* __-lt__ проверяет, меньше ли первое число, чем второе.
+* __-ge__ выводит true, если первое число больше или равно второму.
+* __-le__ выводит true, если первое число меньше или равно второму.
+
+Использовать операторы сравнения можно с помощью команды __test__. Команда test принимает два значения и оператор сравнения и возвращает 1 или 0 в зависимости от результата:
+```
+test "hello" = "hello" 
+echo $? 
+# Выведет 0 (true), так как строки одинаковые
+test "hello" != "world" 
+echo $? 
+# Выведет 0 (true), так как строки различаются
+```
+### Ветвления
+Ветвления __if-then-else__ позволяют проверить условие и выполнить один набор команд, если условие истинно, и другой набор команд, если условие ложно. Это выглядит так:
+```
+if [ условие ]; 
+then
+    # Команды, которые нужно выполнить, если условие истинно
+else
+    # Команды, которые нужно выполнить, если условие ложно
+fi
+```
+Открывающую и закрывающую квадратные скобки нужно отделять от операндов пробелами.
+
+А если в паре с основным условием нужно проверить дополнительное, используют конструкцию __elif__:
+```
+if [ условие_1 ]; 
+then
+    # Команды, которые нужно выполнить, если условие_1 истинно
+elif [ условие_2 ];
+then
+    # Команды, которые нужно выполнить, если условие_2 истинно
+else
+    # Команды, которые нужно выполнить, если все условия ложны
+fi
+```
+Существует и более короткая форма записи условной конструкции — if-then. Её используют, когда нужно проверить только одно условие:
+```
+if [ условие ]; 
+then 
+# Команды, которые нужно выполнить
+fi
+```
+В этом случае команды будут выполнены, только если условие истинно.
+
+Кроме того, в Bash есть логические операторы __& & (логическое И)__ и __|| (логическое ИЛИ)__, которые позволяют комбинировать несколько условий и возвращать соответствующее булево значение.
+
+### Циклы
+Как и в большинстве языков программирования, в Bash есть циклы. Они бывают двух видов:
+
+* for — когда количество итераций заранее известно.
+* while — когда количество итераций заранее не известно.
+
+Вот как выглядит сигнатура цикла for:
+```
+for переменная цикла in элемент1 элемент2 ... элементN
+do
+# Команды, которые будут выполняться в цикле
+done
+```
+Количество итераций (часть между in и do) можно указать простым перечислением элементов:
+```
+for fruit in apple banana cherry
+do
+    echo "I like $fruit"
+done
+```
+Будет выведено:
+```
+# I like apple
+# I like banana
+# I like cherry
+```
+Для явного указания нужного количества итераций используют арифметические выражения:
+```
+for ((i=0; i<5; i++))
+do
+  echo "Iteration number $i"
+done
+```
+Будет выведено:
+```
+# Iteration number 0
+# Iteration number 1
+# Iteration number 2
+# Iteration number 3
+# Iteration number 4
+```
+А вот так выглядит сигнатура цикла __while__:
+```
+while [ условие ]
+do
+  # Команды, которые будут выполняться в цикле
+done
+```
+Условие __(condition)__ — это выражение, результат которого является логическим значением true или false. Команды внутри цикла будут выполняться до тех пор, пока condition возвращает true.
+
+## Литература
+
+1. <https://skillbox.ru/media/code/kak-polzovatsya-bash-ekspressrukovodstvo-dlya-nachinayushchikh/>
+2. <https://cloud.vk.com/blog/detali-raboty-bash>