Как запускать и писать Bash-скрипты в Linux: пошаговая инструкция
В процессе работы на компьютере пользователи перемещают файлы, запускают программы, копируют документы и совершают другие рутинные действия. Их выполнение можно автоматизировать, если написать «сценарии» для операционной системы. Пример таких сценариев в Linux — Bash-скрипты. Давайте разбираться, что это такое, как их писать и запускать.

Что такое Bash
Bash (Bourne Again SHell) — это современная командная оболочка для Linux и других Unix-подобных систем, которая служит одновременно и интерактивным интерпретатором команд, и языком сценариев.
Как оболочка, Bash позволяет пользователю напрямую взаимодействовать с системой, выполняя команды для навигации по файловой системе, управления процессами и настройки окружения.
Как на языке сценариев, на Bash пишут скрипты для автоматизации повторяющихся действий. Эти программы поддерживают переменные, условия, циклы и функции, что дает возможность гибко работать с файлами, данными и другими программами.
Благодаря этому двойному назначению, Bash является фундаментальным инструментом для эффективной работы в командной строке и создания решений для автоматизации. Например, его можно использовать для управления задачами виртуальных машин Evolution Compute.
Какие рутинные процессы можно автоматизировать с помощью Bash-скриптов:
переименование файлов в папках и каталогах;
перенос файлов в другие папки;
резервное копирование документов;
запуск сервисов и программ при включении компьютера;
скачивание и распаковка архивов.
Список можно продолжать, поскольку каждый пользователь сам решает, что ему удобно автоматизировать. Дело за малым — научиться правильно писать Bash-скрипты. Для этого не обязательно быть профессиональным программистом — достаточно освоить основные алгоритмы и принцип создания сценариев.
Развертывание Bash-среды
В большинстве дистрибутивов Bash уже установлен по умолчанию. Чтобы проверить это, введите в терминале: bash --version.
Если Bash установлен, вы увидите информацию о версии, например: GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu). Также можно проверить путь к исполняемому файлу с помощью команды which bash. Обычно Bash располагается по пути /bin/bash или /usr/bin/bash.
Если Bash не установлен, необходимо действовать самостоятельно. Предлагаем алгоритмы для разных дистрибутивов Linux:
CentOS/RHEL/Fedora/AlmaLinux/Rocky Linux:

Arch Linux и производные:
Debian/Ubuntu и производные:
Бывает, что Bash установлен, но по умолчанию используется другая оболочка. С помощью команды cat/etc/shells можно проверить, какие оболочки доступны. Чтобы по умолчанию использовать Bash, введите:
Затем перезагрузите компьютер, чтобы изменения отобразились.

Выбор редактора для написания скриптов
Для написания скриптов можно использовать любой встроенный в операционную систему текстовый редактор либо специально настроенную среду. Второй вариант удобнее, поскольку там уже все «заточено» под написание. Предлагаем три популярных редактора.
Vim
Этот классический консольный редактор — в списке лидеров у специалистов, которые пишут Bash-скрипты. Главным образом потому, что тут можно кастомизировать функциональность под себя для большего удобства. Если использовать плагины, получится сделать из классического редактора полноценную консольную IDE.
Какие еще есть плюсы у Vim:
высокая скорость работы в терминале;
возможности модального редактирования;
наличие подсветки синтаксиса и автодополнения кода;
удобное управление с клавиатуры.
Подводные камни тоже есть, особенно для новичков. Редактор нужно правильно настроить, что не всегда просто, если нет опыта. Кроме того, нужно учить специальные команды и разбираться в интерфейсе. Поэтому Vim — это все же вариант для профессиональных программистов.

Nano
Как и Vim, это консольный редактор. В нем проще разобраться новичкам, поскольку сложные настройки не нужны. Здесь уже есть базовый набор программ, доступный из «коробки».
Преимущества редактора:
простой, интуитивно понятный интерфейс, в котором разберутся даже новички;
подсветка синтаксиса для популярных языков программирования;
непосредственное (немодальное) редактирование;
возможность гибкой настройки цветовых схем.
Минусы такие:
не поддерживаются плагины, поэтому функциональность редактора расширить не получится;
не предусмотрено автоматическое завершение кода;
ограниченные возможности кастомизации.
Для написания Bash-скриптов Nano подойдет, но для серьезного программирования он не предназначен.

Visual Studio Code
Это универсальный редактор кода, который легко превращается в удобную среду разработки. Поддерживает практически все распространенные языки программирования, плагины для расширения функциональности. Например, для работы с Bash можно установить Bash IDE.
Сильные стороны редактора:
удобный современный пользовательский интерфейс;
возможность автоматического завершения кода;
подсветка синтаксиса;
помощник на основе искусственного интеллекта;
инструменты для поиска ошибок в коде и редактирования.
Минусы Visual Studio Code:
высокая нагрузка на процессор;
медленная работа на старых устройствах;
ограниченная базовая функциональность;
необходимость в ручной настройке некоторых инструментов.
Visual Studio Code подойдет как для новичков, так и для опытных программистов. Интерфейс редактора можно настроить под себя, чтобы в процессе работы не тратить время на поиск нужных инструментов.

Синтаксис Bash-скриптов
Минимальная структура Bash-скрипта выглядит так:
Пояснение:
#!/bin/bash — шебанг (shebang) указывает системе, какой интерпретатор использовать для выполнения скрипта.
# Комментарий — строка комментария, игнорируется интерпретатором.
команда1, команда2 — обычные команды, такие же, как в терминале.
Простая программа: "Hello, World!"
Базовый пример скрипта в любом языке программирования — вывод сообщения "Hello, World!" на экран. В Bash это выглядит так:
Разберем программу:
#!/bin/bash — шебанг-строка, указывающая системе, что скрипт должен выполняться с использованием интерпретатора Bash.
# Этот скрипт выводит "Hello, World!" на экран — комментарий в скрипте. Комментарии начинаются с символа # и игнорируются интерпретатором. Они поясняют, что делает конкретная часть кода.
echo — встроенная команда в Bash, которая выводит текст на экран. В данном случае она выводит строку "Hello, World!" в терминал.
Внешние и двойные кавычки используются для обозначения строкового значения, которое передается в команду echo. В этом случае на экране появится сообщение: «Hello, World!».
Работа с переменными и параметрами
Работа с переменными и параметрами в Bash нужна для динамичного управления данными в скриптах и создания гибких решений. Рассказываем основные тонкости.
Создание и использование переменных
Переменные в Bash — это именованные места для хранения данных (строк, массивов текста, чисел), которые используются в процессе выполнения скрипта. Если говорить простым языком, то переменные — способ хранить информацию, чтобы было удобно вновь к ней обращаться. Для доступа к сохраненным значениям нужно использовать префикс $.
Пример переменных: name="Alice", age=25. Как обращаться к переменным:
Пример объявления и использования переменной:
Параметры командной строки
Использование параметров командной строки — распространенный способ передачи данных Bash-скриптам. Вызвав сценарий с параметрами, можно передать данные, с которыми он будет работать. Параметры дают возможность создавать более универсальные и адаптивные скрипты, которые могут работать с различными входами, заданными в командной строке.
Параметры могут быть получены с помощью специальных переменных, таких, как $1, $2 и далее (до $9), где число указывает на позицию параметра. Имя скрипта — $0. Количество переданных параметров — $#. Вывод параметров списком — $@. Вывод параметров единой строкой — $*.
Разберем пример. Вот вводные:
Скрипт будет выглядеть так: ./script.sh Hello World. И такой результат мы получим:
Имя скрипта: ./script.sh
Первый параметр: Hello
Второй параметр: World
Количество переданных параметров: 2
Все параметры: Hello World.
Если вы хотите, чтобы скрипт проверял количество переданных параметров и выполнял действие в зависимости от этого, можно использовать следующий код:
Управляющие структуры
Управляющие структуры в Bash — это элементы синтаксиса, которые позволяют контролировать ход выполнения скрипта в зависимости от определенных условий или повторяющихся действий. Например, к управляющим структурам относятся условные выражения и циклы.
Условные выражения
Фундамент в любой структуре принятия решений — условие if. Общий синтаксис выглядит так:
В конце обязательно должно быть fi — обратное написание if.
Разберем пример скрипта root.sh, в котором заложено утверждение «вы пользователь root». Сценарий повторяет утверждение, если вы действительно запускаетесь от имени пользователя root.

Команда whoami выведет имя пользователя. Если это ваше имя и вы входите как пользователь root, условие $(whoami) = ‘root’ будет истинным.
Еще в Bash есть оператор if-else. В него можно включить код, который будет запускаться, если условие if оценивается как ложное. На скрине пример, как это выглядит.

Если вы запустите скрипт не от имени пользователя root, выйдет сообщение такого типа, как на скрине.
Конструкция case
Операторы case иногда заменяют if, поскольку их легче читать. Как выглядит синтаксис case:
Операторы case удобны для работы с регулярными выражениями или при сопоставлении образцов. Пример сценария:

Один символ принимается в качестве аргумента. В данном случае — *. Сценарий показывает, чем является этот символ — маленькой/большой буквой алфавита, числом или специальным символом.

Циклы
Циклы в Bash — инструменты для автоматизации повторяющихся задач. В зависимости от ситуации можно использовать разные типы циклов — for для фиксированного числа повторений и while — для выполнения команд, пока истинно определенное условие.
Цикл for используется для многократного выполнения набора команд. Он удобен, если вы знаете количество повторений.
С помощью цикла for можно автоматизировать задачи, например, создание резервных копий нескольких файлов:
Результат выполнения:
Создание резервной копии для: file1.txt
Создание резервной копии для: file2.txt
Создание резервной копии для: file3.txt
Цикл while выполняет команду или группу команд, пока выполняется заданное условие. Это полезно в случаях, когда количество повторений заранее неизвестно, и нужно продолжать выполнять команды до тех пор, пока что-то не изменится.
Цикл while можно использовать для выполнения повторяющейся задачи, например, проверки использования процессора, пока его нагрузка не уменьшится ниже заданного порога
Пример использования цикла while:
Результат:
Текущая нагрузка на процессор: 75.5%
Текущая нагрузка на процессор: 72.3%
Нагрузка на процессор ниже порога. Завершаем.
Цикл будет продолжаться, пока нагрузка на процессор не упадет до заданного порога.
Функции и их использование
Функции в Bash — блоки кода, которые можно многократно использовать. Если повторно нужен какой-то блок, достаточно сослаться на него в скрипте.

Пример функции:
Функция greet выводит приветствие с именем, которое передается как аргумент.При вызове greet "Alice" скрипт выведет Hello, Alice!.
Передача параметров в функцию
Функции могут принимать параметры (аргументы), которые передаются функции при ее вызове. Параметры обозначаются как $1, $2, ..., $n в теле функции (первый параметр — $1, второй — $2 и так далее).
Пример:
Функция sum принимает два параметра, складывает их и выводит результат.
Возврат значения из функции
Чтобы вернуть значение из функции, можно использовать команду echo, а затем присвоить результат переменной при вызове функции.
Пример:
Функция multiply возвращает результат умножения двух чисел, который сохраняется в переменной result.
Локальные переменные
Чтобы использовать локальные переменные внутри функции и избежать конфликтов с глобальными переменными, можно использовать ключевое слово local.
Пример:
Переменная sum объявляется как локальная, поэтому ее значение доступно только внутри функции.
Рекурсия в Bash
Функции в Bash могут вызывать сами себя. Эта способность называется рекурсией. Она позволяет решать сложные задачи, разбивая их на подзадачи.
Пример:
Функция factorial вычисляет факториал числа с использованием рекурсии.
Запуск Bash-скриптов
Перед тем, как запустить Bash-скрипт, необходимо установить права доступа, чтобы система могла его выполнить. Для этого используется команда chmod:
Команда дает права на выполнение скрипта, то есть файл script.sh становится исполняемым.
Как запустить скрипты:
Из терминала. Если скрипт находится в текущей директории, его можно запустить, указав путь с префиксом ./: Пример:./script.sh.
Используя команду sh. Пример: sh script.sh.
Используя команду bash: bash script.sh.
Наиболее удобным для исполняемых файлов с установленными правами является подход с префиксом.
Простые примеры Bash-скриптов для повседневных задач
Есть целый ряд простых готовых Bash-скриптов, которые помогут в автоматизации рутинных задач.
Скрипт для мониторинга использования диска
Этот скрипт проверяет использование дискового пространства в системе и отправляет предупреждение, если диск заполнен более чем на 90%.
Скрипт для переименования файлов в директории
Этот скрипт добавляет префикс ко всем файлам в указанной директории.
Скрипт для мониторинга процесса
Этот скрипт проверяет, запущен ли определенный процесс и уведомляет, если процесс не найден.
Скрипт для очистки временных файлов
Этот скрипт удаляет все файлы старше семи дней в каталоге временных файлов.
Скрипт для изменения прав на файлы в директории
Этот скрипт изменяет права доступа для всех файлов в указанной директории, предоставляя полные права владельцу и ограниченные — всем остальным.
Рекомендации по написанию Bash-скриптов и отладке
Несколько советов новичкам:
Всегда используйте #!/bin/bash в начале скрипта.
Используйте комментарии для пояснения логики.
Проверяйте переменные на существование, чтобы избежать ошибок.
Для отладки используйте режим -x: bash -x script.sh.
Следите за отступами — они не обязательны, но улучшают читаемость.
В Bash-скриптах могут быть синтаксические и логические ошибки. Как их обнаружить:
Опция set -x включает трассировку команд, то есть выводит все команды и их аргументы перед выполнением. Это поможет увидеть, какие команды выполняются и где возможные ошибки.
Команда bash -n script.sh позволяет проверить синтаксис скрипта без его выполнения и выявить синтаксические ошибки в коде.
$? переменная позволяет проверить код выхода самой последней команды. Если выйдет ноль — все в порядке.
echo-оператор в коде поможет определить, где ошибки и какие значения будут передаваться в переменные
Заключение
Если только изучаете Bash, начинайте с написания простых скриптов. Для работы достаточно графического или текстового редактора. Не забывайте про отладку готовых скриптов, чтобы не допустить логических и синтаксических ошибок.