Основы Bash в Linux. Пишем первый скрипт на Bash

Что такое Bash, основные команды и синтаксис. Как выбрать редактор, создать и запустить первый Bash-скрипт. Как использовать переменные, аргументы, условные операторы и циклы. Примеры и советы для начинающих.

Если вы только начинаете осваивать Linux или уже изучили работу с терминалом, то новый этап — научиться создавать сценарии на Bash. Скрипт представляет собой последовательность команд, записанную в файл для последующего запуска одной командой вместо того, чтобы каждый раз вводить их вручную. Это открывает массу возможностей: от простой автоматизации до создания собственных утилит.

В этом руководстве мы разберём, как написать первый работающий Bash-скрипт. Вы узнаете базовый синтаксис языка, научитесь работать с переменными и условиями, а затем создадите практический скрипт, который сможете сразу использовать. Если вы уже работаете с другими языками программирования или инструментами, освоение Bash в Linux займёт минимум времени: синтаксис прост, а практическая польза очевидна с первого скрипта.

Что такое Bash и зачем он нужен

Bash — это консольная оболочка и одновременно язык программирования сценариев для Linux и систем семейства Unix. Её часто путают с терминалом, но терминал — это лишь программа для отображения, а Bash — сам интерпретатор команд.

Bash обрабатывает команды в текстовом виде и служит инструментом для создания автоматизированных сценариев. Почти во всех дистрибутивах Linux именно Bash установлен как оболочка по умолчанию.

Bash работает в двух режимах. В интерактивном режиме вы вводите команды по одной — например, ls для просмотра файлов или cd для перехода между папками — и сразу видите результат. В неинтерактивном режиме Bash выполняет команды из заранее подготовленного файла — скрипта. Вы записываете в этот файл целую последовательность команд и запускаете их одной командой, как программу.

Bash-скрипты избавляют от необходимости каждый день выполнять одни и те же действия вручную. Представьте, что вам регулярно нужно создавать резервную копию важных файлов, очищать логи, переименовывать кучу документов или проверять работу сервера. Вводить это вручную скучно и долго. Скрипт берёт эту рутину на себя. Вот несколько реальных задач, которые легко автоматизировать:

  • Массовое переименование или перемещение файлов — например, добавить дату к названиям всех фотографий в папке.
  • Автоматическое создание резервных копий — каждый день архивировать каталог с вашими проектами.
  • Обработка и фильтрация логов — найти все ошибки за последнюю неделю и сохранить в отдельный файл.
  • Настройка системы и установка программ — развернуть рабочее окружение на новом компьютере одной командой.

Первая строка любого Bash-скрипта обычно выглядит как #!/bin/bash. Это называется shebang (или шебанг). Эта строчка говорит операционной системе: «Запускай этот файл именно через Bash, а не через что-то другое». Без неё система может не понять, как выполнять ваш скрипт, или запустит его неправильно.

Что нужно знать о синтаксисе Bash

Прежде чем писать первый скрипт, нужно разобраться с базовым синтаксисом Bash: как работать с переменными, как добавить условия и как повторять действия в цикле. Этих трёх элементов хватит, чтобы создать рабочий скрипт.

Переменные и команды

Переменные в Bash объявляются так: пишете имя переменной, знак равенства и значение — без пробелов. Запись NAME="value" правильная, а NAME = "value" вызовет ошибку.

Добавьте перед именем переменной знак доллара: $NAME. Можно писать и более явно — ${NAME} в фигурных скобках. Второй вариант полезен, когда переменная стоит рядом с другим текстом без пробела.

Теперь о кавычках. В Bash есть два типа — одинарные и двойные, и они работают по-разному. В двойных кавычках переменные раскрываются — система подставляет их значение. А в одинарных кавычках переменная воспринимается как обычный текст. Пример:

NAME="Linux"          
echo "Привет, $NAME"  # Выведет: Привет, Linux
echo 'Привет, $NAME'   # Выведет: Привет, $NAME

Вот что мы получили после запуска нашего скрипта:

Две главные команды для начала — это echo и read. Команда echo выводит текст на экран. Это основной способ показать пользователю результат работы скрипта или промежуточные данные. Команда read делает обратное: получает ввод от пользователя и сохраняет его в переменную.

Ещё один важный элемент — комментарии. Всё, что идёт после символа решётки #, Bash игнорирует. Комментарии нужны, чтобы объяснить, зачем нужна та или иная строка кода.

Простой пример со всем вместе:

#!/bin/bash
# Скрипт приветствия

echo "Как вас зовут?"
read username   # Получаем имя от пользователя name="Пользователь"   

# Объявляем переменную

echo "Привет, $username!"

После того как Bash запросит наше имя, мы получим следующий результат в консоли:

Условные операторы

С их помощью скрипт может выбирать варианты действий. Основная конструкция имеет вид if-then-else-fi. При истинности условия запускается код, расположенный после then. При ложном результате — код после else. Конструкция всегда завершается словом fi (это if наоборот).

Условие пишется в квадратных скобках, и тут есть важное правило: между скобками и самим условием обязательно должны быть пробелы. Запись [ $a -eq 5 ] правильная, а [$a -eq 5] — нет.

Для сравнения используются специальные операторы. Для чисел это -eq (равно), -ne (не равно), -gt (больше), -lt (меньше), -ge (больше или равно), -le (меньше или равно). Для строк проще: знак равенства = для проверки на равенство и != для неравенства.

Практический пример — проверка существования файла. Это одна из самых частых задач в скриптах:

#!/bin/bash          

filename="config.txt"

if [ -f "$filename" ]; then          
  echo "Файл $filename существует"
else
  echo "Файл $filename не найден"
fi

В качестве теста мы не будем создавать запрашиваемый файл, чтобы посмотреть, что выведет консоль. Результат получится следующий:

Оператор -f проверяет, существует ли файл и является ли он обычным файлом (не директорией или чем-то ещё). Обратите внимание: переменная $filename заключена в двойные кавычки — это хорошая практика, которая защищает от ошибок, если в имени файла вдруг окажутся пробелы.

Циклы

Циклы нужны, когда одно и то же действие нужно повторить много раз. В Bash два основных типа циклов: for и while.

Цикл for используется для перебора списков элементов. Например, вы можете обработать все текстовые файлы в папке: for file in *.txt. Или создать последовательность чисел: for i in {1..10}. Первый вариант переберёт все файлы с расширением .txt, второй — числа от 1 до 10.

Вот пример цикла for для обработки файлов:

#!/bin/bash

for file in *.txt
do
  echo "Обрабатываю файл: $file"
done

Конструкция while функционирует иначе. Она запускает команды до тех пор, пока сохраняется истинность условия. Это полезно в ситуациях, когда число повторений действия заранее не определено. Например, пока счётчик меньше определённого числа:

#!/bin/bash

count=1
while [ $count -le 5 ]
do
  echo "Итерация номер $count"
  count=$((count + 1))
done

Вот что мы получим:

Конструкция $((count + 1)) — это арифметическая операция в Bash. Она увеличивает значение переменной count на единицу.

Оба типа циклов заканчиваются словом done. Какой выбрать — зависит от задачи. Если нужно пройтись по известному списку, используйте for. Если нужно повторять действие, пока не выполнится условие, — while.

Как выбрать редактор для написания скриптов

Bash-скрипт — это обычный текстовый файл, так что написать его можно в любом текстовом редакторе. Но некоторые редакторы удобнее других.

Хороший выбор — Nano. Это простейший редактор, который уже установлен в большинстве Linux-систем. Его главное преимущество — не нужно ничего учить. Все основные команды показаны прямо внизу экрана: Ctrl + O для сохранения, Ctrl + X для выхода. Открыли файл, написали код, сохранили — и всё работает.

Кроме того, есть Vim — мощный и быстрый редактор с огромными возможностями. Но у него крутая кривая обучения. Vim работает в модальном режиме: чтобы начать печатать, нужно нажать i, чтобы сохранить и выйти — набрать :wq. Новичка это может сбить с толку. Если вы только начинаете, Vim можно отложить на потом.

Есть ещё один вариант — Visual Studio Code. Это графический редактор с подсветкой синтаксиса и подсказками. Если вы привыкли к визуальным интерфейсам и окнам, а не к терминалу, VS Code будет самым комфортным выбором.

Новичкам лучше всего начинать с редактора VS Code: он понятный, удобный и работает в графическом интерфейсе. Nano тоже подойдёт, если нужно быстро поправить файл прямо в консоли. А вот к Vim стоит возвращаться, когда появится уверенность и желание разобраться в нём глубже.

Пишем первый Bash-скрипт: практика

Теперь применим всё, что изучили, и напишем настоящий работающий скрипт. Создадим утилиту для автоматического создания резервных копий файлов. Это полезная штука, которую можно сразу использовать в реальной работе.

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

Начнём с создания файла. Откройте терминал и выполните команду:

nano backup.sh

Мы используем Nano, но можете взять любой редактор, который вам удобен. Теперь напишем код скрипта. Начнём с обязательного shebang в первой строке:

#!/bin/bash

Эта строка сообщает системе, что файл нужно запускать через Bash. Без неё скрипт может не заработать.

Дальше добавим комментарий, который объясняет назначение скрипта, и запросим у пользователя имя файла:

# Скрипт для создания резервной копии файла с датой

echo "Введите имя файла для резервного копирования:"
read filename

Команда read получает ввод от пользователя и сохраняет его в переменную filename. Теперь нам нужно сохранить текущую дату, чтобы добавить её к имени копии:

current_date=$(date +"%Y-%m-%d_%H-%M-%S")

Конструкция $(date +"%Y-%m-%d_%H-%M-%S") выполняет команду date и сохраняет результат в переменную. Формат даты будет выглядеть примерно так: 2024-03-15_14-30-45.

Теперь самое важное — проверка существования файла и его копирование:

if [ -f "$filename" ]; then
  backup_name="${filename}_${current_date}"
  cp "$filename" "$backup_name"
  echo "Резервная копия создана: $backup_name"
else
  echo "Ошибка: файл $filename не найден"
fi

Разберём построчно. Оператор -f проверяет, существует ли файл и является ли он обычным файлом. Переменная backup_name создаёт новое имя: берёт исходное имя файла, добавляет символ подчёркивания и дату. Команда cp копирует исходный файл под новым именем. Дальше скрипт сообщает пользователю, где сохранена копия. Если файл не найден, выводится сообщение об ошибке.

Вот полный код скрипта:

#!/bin/bash
# Скрипт для создания резервной копии файла с датой

echo "Введите имя файла для резервного копирования:"
read filename

current_date=$(date +"%Y-%m-%d_%H-%M-%S")

if [ -f "$filename" ]; then
  backup_name="${filename}_${current_date}"
  cp "$filename" "$backup_name"
  echo "Резервная копия создана: $backup_name"
else
  echo "Ошибка: файл $filename не найден"
fi

Как запустить Bash-скрипт в Linux

Скрипт написан, теперь разберёмся, как его запустить. Сначала сохраните файл в редакторе. В Nano нажмите Ctrl + O для сохранения, затем Enter для подтверждения имени и Ctrl + X для выхода. Вы вернётесь в терминал.

По умолчанию Linux не позволяет выполнять только что созданные файлы — это сделано для безопасности. Нужно дать файлу права на выполнение. В терминале выполните:

chmod +x backup.sh

Команда chmod +x делает файл исполняемым. Теперь есть два основных способа запустить скрипт.

Первый и самый распространённый способ — выполнение через ./backup.sh. Точка и слеш перед именем говорят системе: «Запусти файл из текущей директории». Этот способ требует, чтобы файл имел права на выполнение (которые мы только что установили через chmod) и содержал корректный shebang в первой строке.

Второй способ — запуск через bash backup.sh. В этом случае вы явно указываете интерпретатор, и права на выполнение не требуются. Система всё равно запустит файл через Bash.

Давайте протестируем скрипт. Сначала создайте тестовый файл:

echo "Тестовые данные" > test.txt

Теперь запустите скрипт:

./backup.sh

Скрипт спросит имя файла. Введите test.txt и нажмите Enter. Вы увидите сообщение: «Резервная копия создана: test.txt_15.03.2024_14-30-45». Проверьте командой ls — в директории появился новый файл с датой в названии.

Теперь попробуйте ввести имя несуществующего файла, например notfound.txt. Скрипт выведет: «Ошибка: файл notfound.txt не найден». Всё работает правильно.

Что дальше: советы для начинающих

Чтобы ваши скрипты были надёжными и удобными в поддержке, стоит придерживаться нескольких базовых практик:

  • Всегда используйте shebang. Строка #!/bin/bash в начале файла обеспечивает правильное выполнение скрипта в любой системе, независимо от настроек окружения пользователя.

  • Добавляйте комментарии к коду. Особенно для сложной логики и нетривиальных решений. Даже собственный код через месяц может показаться непонятным без пояснений.

  • Выбирайте понятные имена переменных. Вместо абстрактных a или x используйте описательные названия вроде filename или backup_date — это упрощает чтение и отладку.

  • Заключайте переменные в двойные кавычки. Запись "$var" вместо $var защищает от проблем с пробелами и специальными символами в значениях.

  • Проверяйте входные данные. Убедитесь, что пользователь ввёл корректное значение, файл существует, а число действительно является числом, прежде чем обрабатывать данные.

  • Тестируйте на копиях. Никогда не запускайте непроверенные скрипты на важных данных. Создайте тестовую директорию с копиями файлов: восстановить удалённый по ошибке документ может быть сложно или невозможно.

  • Используйте режим отладки. Команда bash -x script.sh показывает, какие команды выполняются и с какими значениями, — это экономит массу времени при поиске ошибок.

  • Проверяйте код через ShellCheck. Этот автоматический анализатор находит типичные ошибки в Bash-скриптах и предлагает улучшения ещё до запуска.

Эффективнее всего начинать с простых скриптов и постепенно усложнять их, добавляя новые функции по мере роста опыта. Официальная документация Bash (доступна через команду man bash), решения на Stack Overflow и практика на реальных задачах из повседневной работы помогут быстро прокачать навыки скриптинга.

Основы Bash в Linux. Пишем первый скрипт на Bash
Войдите, чтобы сохранить пост