# Интегрированная среда разработки Bash (Ковалев Никита 47 группа) ## Что такое Bash __BASH__ (Bourne-Again Shell) — один из наиболее распространенных командных интерпретаторов в UNIX-подобных системах, а также язык интерфейса командной строки, который поддерживает использование переменных, массивов, циклов, функций, арифметических операторов, операций ввода-вывода и прочих возможностей. Bash был создан и выпущен в 1989 году Брайаном Фоксом как open source замена для Bourne Shell, вышедшей в 1976 году. Его название является аббревиатурой от Bourne Again SHell. Большинство современных операционных систем, кроме WINDOWS, основаны на UNIX. Это, в том числе, дистрибутивы Linux, macOS, iOS и Android. UNIX характеризуется модульной архитектурой, в которой каждая функция выполняется отдельной программой, а взаимодействие между ними происходит через общую файловую систему. Shell используется для управления этими программами и исполнения команд. __Shell (оболочка)__ — это программа, обеспечивающая взаимодействие пользователя с системой. В командной строке вы вводите команды, которые оболочка интерпретирует, вызывает соответствующие программы и отображает результаты. Команды могут подаваться не только в текстовом режиме, но и считываться из файла, называемого shell-скриптом или оболочкой shell-программы. Для обеспечения интерфейса командной строки в операционных системах используются командные интерпретаторы. Они могут представлять собой самостоятельные языки программирования со своим синтаксисом и функциональными возможностями. Самые популярные командные интерпретаторы — это __Terminal__ (Linux, macOS) и __Konsole__ (Windows). Именно с их помощью можно взаимодействовать с командной оболочкой shell, которая будет принимать специальные команды и передавать их на выполнение операционной системе. Язык Bash поддерживает переменные, массивы, циклы, функции, условные и арифметические операторы, операции ввода-вывода и другие средства. Но главная его фишка — возможность создавать скрипты для ускорения работы на компьютере и автоматизации рутины. Например, с их помощью можно: * быстро переименовывать все файлы в папке; * генерировать случайные пароли; * создавать и отправлять отчёты по электронной почте; * проверять и обновлять систему и приложения; * одной командой очищать кэш браузера. ## Основы Bash Для начала — три главных особенности, с которых стоит начать знакомство с Bash: 1. Написание любого скрипта нужно начинать со строки: #!/bin/bash. После символа #! следует путь к bash-интерпретатору. Вы можете узнать путь к нему (возможно, интерпретатор был установлен в другое место) с помощью команды whereis bash. 2. Комментарии и примечания нужно указывать после символа # (кроме первой строки, где мы указываем путь к bash-интерпретатору) 3. Bash не имеет строгой системы типов Тип данных определяется в зависимости от контекста использования переменной и ее содержимого. Bash устанавливает следующие правила для именования переменных: * Имена переменных должны начинаться с латинской буквы (в верхнем или нижнем регистре) или символа подчеркивания. * В имени переменной запрещено использовать пробелы или специальные символы. * Регистр букв в именах переменных учитывается. Переменные name1 и Name1 считаются разными. * Рекомендуется избегать использования ключевых слов Bash в качестве названий переменных ## Синтаксис, переменные и команды ### Переменные Переменные в Bash объявляются просто: ``` message="Good morning!" ``` Теперь переменная message хранит значение — текстовое сообщение «Hello, World!». Вывести значение переменной можно с помощью команды __echo__: ``` echo $message ``` В 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 ``` ### Типы данных Строки __(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 ``` В этом случае команды будут выполнены, только если условие истинно. Cписок логических операторв, которые используются для конструкции if-then-else-fi: * -z # строка пуста * -n # строка не пуста * =, (==) # строки равны * != # строки неравны * -eq # равно * -ne # неравно * -lt,(< ) # меньше * -le,(<=) # меньше или равно * -gt,(>) #больше * -ge,(>=) #больше или равно * ! #отрицание логического выражения * -a,(&&) #логическое «И» * -o,(||) # логическое «ИЛИ» ### Циклы Как и в большинстве языков программирования, в 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. 2. 3.