Что такое Linux Bash и как им пользоваться
2026-02-21 18:21 Diff

#статьи

  • 28 май 2025
  • 0

Заставляем пингвина делать всё, что нам нужно.

Иллюстрация: Катя Павловская для Skillbox Media

Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и «Хабра».

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

Содержание

Bash (Bourne Again Shell) — это одна из самых популярных оболочек командной строки в Linux. Она позволяет взаимодействовать с системой с помощью простых текстовых команд.

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

Bash чаще всего используют для автоматизации — например, чтобы:

  • переименовать сотни файлов в папке;
  • раз в сутки копировать важные документы в резервную папку;
  • настроить запуск сервера или программы при включении компьютера;
  • скачать нужный архив и сразу его распаковать.

Хотя Bash чаще всего ассоциируют с Linux, он также работает на macOS, а в Windows его можно использовать через WSL (Windows Subsystem for Linux).

Прежде чем погрузиться в основы Bash, нужно выбрать редактор и подготовить рабочее окружение. Для написания скриптов подойдёт любой текстовый редактор, встроенный в операционную систему, однако гораздо удобнее работать в специально настроенной среде. Ниже — три популярных варианта: от классических консольных редакторов до современной графической IDE.

Интерфейс редактора Vim в терминале
Скриншот: Vim / Skillbox Media

Vim — это консольный редактор, который профессионалы часто используют для работы с Bash-скриптами. Его ценят за высокую скорость работы и универсальность.

Преимущества:

  • Есть подсветка синтаксиса и автодополнение кода.
  • С помощью плагинов можно превратить Vim в полноценную консольную IDE.
  • Большие возможности кастомизации.

Недостатки:

  • Новичкам бывает трудно научиться работать с редактором.
  • Нужно выделить время на настройку.
Интерфейс редактора Nano в терминале
Скриншот: Nano / Skillbox Media

Nano — ещё один консольный редактор, но уже для тех, кто хочет сразу перейти к работе и не тратить время на настройку. Разработчики дистрибутивов Linux включают Nano в базовый набор программ, который доступен из коробки.

Преимущества:

  • Простой в освоении, что полезно для новичков.
  • Интуитивно понятный интерфейс.

Недостатки:

  • Нет поддержки плагинов, автоматического завершения кода.
  • Мало возможностей для кастомизации.
Графический интерфейс редактора VS Code с открытой страницей дополнения Bash IDE
Скриншот: Visual Studio Code / Skillbox Media

VS Code — универсальный редактор кода, который можно превратить в среду разработки на практически любом языке программирования. Чтобы работать с Bash было удобно, стоит установить плагин Bash IDE.

Преимущества:

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

Недостатки:

  • Может сильно нагружать систему, если установить много плагинов.
  • Долго запускается на слабых компьютерах.

Пока можете выбрать редактор, который вам больше понравился по описанию. Позже, безусловно, у вас будет время попробовать несколько решений и определить фаворита. Мы в этой статье будем показывать всё на примере редактора Nano.

Bash-скрипт — это текстовый файл с расширением .sh, который содержит в себе набор команд для оболочки Bash. Чтобы создать такой файл в Linux, надо запустить терминал и выполнить в нём команду touch. В качестве аргумента следует указать имя нового файла:

touch имя_файла.sh

Если не указать точный путь к файлу, то команда touch создаст его в домашней папке Linux.

Файл script.sh в домашней папке — результат работы команды touch
Скриншот: Linux Ubuntu / Skillbox Media

Созданный файл можно открыть в любом текстовом редакторе. Это можно сделать двойным кликом левой кнопки мыши или с помощью терминала. При втором способе надо выполнить команду, которая состоит из названия редактора и имени файла. Например, вот так можно открыть файл с помощью Nano:

nano script.sh

По традиции программисты начинают изучать новый язык программирования с помощью программы, которая выводит на экран фразу «Hello, World!». Не будем ломать устои и пойдём по уже протоптанному пути :)

Создайте файл с расширением .sh, откройте его в текстовом редакторе и вставьте в него код нашего первого скрипта:

#!/bin/bash echo "Hello, World!"

В коде выше:

  • #!/bin/bash — строка, которая указывает, какая программа должна выполнить команды в файле. Например, если бы мы указали #!/bin/python3, то система ожидала бы от нас кода на Python. В сообществе эту строку называют «шебанг».
  • echo"Hello, World!" — команда, которая выводит фразу после себя в терминал.

В интерфейсе редактора Nano код выглядит так:

Редактор Nano с открытым скриптом
Скриншот: Nano / Skillbox Media

Перед тем как закрывать редактор, надо сохранить скрипт. В современных редакторах, например в VS Code, можно настроить функцию автосохранения. В Vim, Nano и других консольных программах всё надо делать вручную.

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

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

chmod +x script.sh

После этого скрипт можно запустить с помощью команды ./:

./script.sh

Программа, которую мы написали ранее, просто выведет в терминал приветствие «Hello, World!»:

Скриншот: Bash / Skillbox Media

Аргументы — это данные, которые можно передать скрипту во время запуска. Они позволяют менять поведение скрипта без изменения кода. Вот так в общем виде выглядит запуск скрипта с несколькими аргументами:

./имя_скрипта.sh аргумент1 аргумент2 аргумент3...

Давайте разберёмся на примере. Представьте, что вы написали код, который выводит в терминал приветствие для Михаила:

#!/bin/bash echo "Привет, Михаил!"

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

#!/bin/bash echo "Привет, $1!"

Команда для запуска скрипта будет выглядеть так:

./script.sh Екатерина

В терминале появится приветствие с именем, которое указали во время запуска:

Скриншот: Bash / Skillbox Media

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

#!/bin/bash echo "Имя: $1" echo "Фамилия: $2" echo "Возраст: $3"

Запустим код с помощью команды ./script.sh Екатерина Иванова 31 и посмотрим на вывод в терминале:

Скриншот: Bash / Skillbox Media

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

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

name="Иван"

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

$name

Давайте создадим скрипт, в котором будет одна переменная с заранее известным значением — переменная с именем Иван, а возраст пользователь должен будет передать в виде аргумента:

#!/bin/bash name="Иван" echo "Здравствуйте, $name!" echo "Ваш возраст: $1"

Вот что выведет скрипт:

Скриншот: Bash / Skillbox Media

Значения переменных можно использовать в математических операциях. Для этого в Bash используют конструкцию $(( )). Напишем скрипт, который складывает значения двух переменных:

#!/bin/bash variable1=86 variable2=91 total=$((points1 + points2)) echo "Сумма: $total"

Вот что код выведет в терминал:

Скриншот: Bash / Skillbox Media

Значения переменных можно не только складывать. Вот список математических операторов, доступных в Bash:

ОперацияОператорСложение+Вычитание-Умножение*Целочисленное деление/Остаток от деления%Возведение в степень**

Условные операторы — это конструкции, которые позволяют выполнять команды в зависимости от выполнения условий. Их используют вместе с условной конструкцией if-then.

Вот как она выглядит в общем виде:

if [ условие ]; then команды, которые нужно выполнить, если условие верно else команды по умолчанию fi

Операторы, которые можно использовать в условиях, выглядят так:

Сравнения чиселОперацияОператорРавно-eqНе равно-neМеньше-ltБольше-gtМеньше или равно-leБольше или равно-geСравнения строкОперацияОператорРавно=Не равно!=Меньше<Больше>Строка пустая-zСтрока не пустая-nПроверка файловОперацияОператорФайл существует-eОбычный файл-fИсполняемый файл-xДиректория-dФайл доступен для чтения-rФайл доступен для записи-wЛогические операцииОперацияОператорЛогическое И&&Логическое ИЛИ||

Напишем программу, которая в виде аргумента будет получать количество баллов пользователя и сообщать, сдал он экзамен или нет. Договоримся, что для успешной сдачи экзамена надо набрать не менее 85 баллов:

#!/bin/bash minimum_score=85 user_score=$1 if [ $user_score -gt $minimum_score ]; then echo "Вы сдали экзамен!" else echo "Вы не сдали экзамен." fi

Вот что программа выведет, если запустить её с разными аргументами:

Скриншот: Bash / Skillbox Media

Циклы — конструкции, которые позволяют выполнять одну и ту же последовательность команд несколько раз. Например, с их помощью можно последовательно обработать несколько файлов или вывести в терминал заданную последовательность чисел. В Bash есть три вида циклов: for, while и until. Давайте детально рассмотрим каждый.

Цикл for выполняет команду для каждого значения из списка. Для примера напечатаем с его помощью числа от 1 до 10:

#!/bin/bash for number in 1 2 3 4 5 6 7 8 9 10; do echo "Число: $number" doneСкриншот: Bash / Skillbox Media

Ещё цикл for можно использовать для обхода файлов в директории. Скрипт откроет каждый файл, соответствующий указанным параметрам, и выполнит заданное действие:

#!/bin/bash for file in *.txt; do echo "Файл: $file" done

Цикл while выполняет команды, пока условие истинно. Как только условие становится ложным, выполнение цикла прекращается. В качестве примера снова напишем скрипт для вывода чисел от 1 до 10. На этот раз слегка изменим алгоритм: создадим переменную, значение которой будем увеличивать на каждом шаге до тех пор, пока оно не станет равно 10. Это и остановит выполнение кода:

#!/bin/bash number=1 while [ $number -le 10 ]; do echo "Число: $number" number=$((number + 1)) done

Вот что появится в терминале после запуска скрипта:

Скриншот: Bash / Skillbox Media

Цикл until — противоположность while: он выполняет команды, пока условие остаётся ложным. Цикл завершится, когда условие станет истинным. Теперь выведем числа в обратном порядке. Для этого создадим переменную со значением 10 и на каждом шаге будем вычитать из него 1. Будем продолжать до тех пор, пока значение переменной не станет единицей, — это остановит выполнение кода:

#!/bin/bash number=10 until [ $number -lt 1 ]; do echo "Обратный отсчёт: $number" number=$((number - 1)) done

Результат работы кода:

Скриншот: Bash / Skillbox Media

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

В общем виде конструкция case в Bash выглядит так:

case variable in pattern1) command1 ;; pattern2) command2 ;; pattern3) command3 ;; *) command_default ;; esac

В ней:

  • variable — переменная, которую нужно проверить.
  • pattern1, pattern2, pattern3 — возможные значения, среди которых скрипт будет искать истинное.
  • command1, command2, command3 — команды, которые выполнятся, если значение переменной совпадёт с соответствующим шаблоном.
  • *) — шаблон по умолчанию, содержимое которого выполнится в любом случае.
  • command_default — команды по умолчанию.
  • esac — ключевое слово, которое указывает на завершение конструкции case: esac — буквально case наоборот.

Напишем скрипт, который при запуске выводит в терминал текущий день недели. Для этого используем case, а переменной date присвоим значение date +%u. Эта команда обращается к утилите date — встроенному инструменту Linux, который отслеживает дату и время, и возвращает числовое значение дня недели (1 — понедельник, 2 — вторник и так далее).

Вот как выглядит код этого скрипта:

#!/bin/bash day=$(date +%u) case $day in 1) echo "Сегодня понедельник" ;; 2) echo "Сегодня вторник" ;; 3) echo "Сегодня среда" ;; 4) echo "Сегодня четверг" ;; 5) echo "Сегодня пятница" ;; 6) echo "Сегодня суббота" ;; *) echo "Неверное значение" ;; esac

А вот что он выводит в терминал:

Скриншот: Bash / Skillbox Media

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

В общем виде функции в Bash выглядят так:

имя_функции () { тело_функции }

В ней:

  • имя_функции — идентификатор, с помощью которого функцию можно будет вызвать в любом месте кода.
  • тело_функции — команды, которые функция выполняет.

В Bash есть два способа вывести результат работы функции:

С помощью return. Ключевое слово return возвращает только целые числа от 0 до 255. Этот способ чаще всего используют для вывода кода ошибок или служебных флагов — чисел, которые подсказывают программе, что следует делать дальше.

check_even() { if (( $1 % 2 == 0 )); then return 0 else return 1 fi }

С помощью echo. Если надо вывести строку или число, которое не входит в промежуток 0–255, лучше всего использовать ключевое слово echo.

check_even() { if (( $1 % 2 == 0 )); then return 0 # Чётное else return 1 # Нечётное fi }

Давайте напишем функцию, которая ищет в папке файлы по названию, переданному пользователем в качестве аргумента.

Код скрипта:

#!/bin/bash # Функция для поиска файла по имени check_file() { if [ -e "$1" ]; then echo "Файл '$1' существует." else echo "Файл '$1' не найден." fi } check_file "file.txt" # Вызываем функцию и передаём ей имя файла

Что скрипт выведет в терминал:

Скриншот: Bash / Skillbox Media
  • Bash — командная оболочка Linux и одноимённый язык программирования.
  • С помощью Bash можно разрабатывать скрипты для автоматизации рутинных задач. Например, можно создать скрипт, который будет автоматически переименовывать файлы по шаблону.
  • Bash поддерживает работу с переменными, функциями, циклами, математическими вычислениями, файловой системой компьютера и операциями ввода-вывода.
  • Скрипты на Bash можно писать в любом текстовом редакторе, но удобнее делать это в специальных средах — например, в Vim, Nano или VS Code.
Практический курс: «Администрирова­ние ОС Linux» Узнать о курсе