ServerAID
Найти гайд, команду, тег… ⌘ K
Глоссарий  ·  термин

bash — что это и зачем

bash (Bourne Again SHell) — это командная оболочка, которая обрабатывает то, что вы вводите в терминале Linux. Запускает программы, расширяет переменные, выполняет конструкции `if` / `for`, читает скрипты из файлов с шебангом `#!/bin/bash`. На Ubuntu — оболочка по умолчанию для интерактивных пользователей; для системных скриптов используют более строгий `/bin/sh` (`dash`).

bash

bash (Bourne Again SHell) — это командная оболочка, которая обрабатывает то, что вы вводите в терминале Linux. Запускает программы, расширяет переменные, выполняет конструкции if / for, читает скрипты из файлов с шебангом #!/bin/bash. На Ubuntu — оболочка по умолчанию для интерактивных пользователей; для системных скриптов используют более строгий /bin/sh (dash).

Что такое shell в принципе

Когда вы открываете терминал и видите приглашение user@host:~$, это пишет shell — программа-оболочка. Её работа: считать строку, разобрать на команду + аргументы, найти исполняемый файл, запустить, вывести результат, ждать следующую строку. Без shell терминал был бы просто чёрным окном.

Shell умеет больше, чем просто вызывать программы:

  • Раскрывает переменныеecho $HOME подставляется на /home/user.
  • Глоббинг*.txt превращается в список файлов.
  • Пайпыcmd1 | cmd2 соединяет вывод одной программы с входом другой.
  • Перенаправления> file пишет в файл, 2>&1 сливает stderr с stdout.
  • Управляющие конструкцииif, for, while, case. Это уже превращает shell в полноценный скриптовый язык.

bash — конкретная реализация POSIX shell от GNU, по умолчанию идущая с Linux-дистрибутивами на базе Debian (Ubuntu, Mint), Fedora, RHEL.

bash vs sh vs dash vs zsh

В Linux несколько разных оболочек, и важно понимать, где какая:

  • sh — это историческое имя. На Ubuntu /bin/sh — это симлинк на /bin/dash, минимальную POSIX-совместимую оболочку. На macOS /bin/sh — это bash в режиме совместимости. На FreeBSD — отдельная реализация. Когда вы пишете #!/bin/sh, скрипт должен быть POSIX-совместимым (без массивов, [[ ]], <<<).
  • bash (/bin/bash) — расширенная оболочка с массивами, ассоциативными массивами, регулярками [[ … =~ … ]], process substitution <(cmd). Стандарт для интерактивной работы.
  • dash (/bin/dash) — минимальная POSIX shell, которую Ubuntu использует для системных скриптов в /etc/init.d/ и /etc/cron.daily/. Работает быстрее bash, но без bash-измов.
  • zsh — альтернативная оболочка с богатой автодополнением, темами (Oh My Zsh), плагинами. Стандартный shell на macOS с 10.15. На Linux ставится через apt install zsh.
  • fish — дружелюбная shell с подсветкой синтаксиса прямо в командной строке. Не POSIX-совместима, скрипты для bash не запустятся.

Если коротко: в терминале — что удобнее (bash или zsh/fish); в скриптах для прода#!/bin/bash, если используете bash-измы; #!/bin/sh, если хотите портабельности на любую POSIX-систему.

Что bash умеет в скриптах

Минимальный скелет bash-скрипта:

#!/bin/bash
set -euo pipefail

name="${1:-world}"
echo "Hello, $name"

Что здесь происходит:

  • #!/bin/bash — шебанг, говорит ядру запускать файл через /bin/bash.
  • set -e — выйти при первой ошибке (ненулевой код возврата команды).
  • set -u — ошибка при использовании необъявленной переменной.
  • set -o pipefail — ошибка в любом шаге пайпа считается ошибкой всего пайпа.
  • ${1:-world} — первый аргумент скрипта, или world если не передан.

bash умеет массивы, ассоциативные массивы (declare -A), условия if/else, циклы for/while/until, функции, ловушки на сигналы (trap), арифметику ($(( … ))). Этого достаточно для DevOps-автоматизации, но для бизнес-логики в проде обычно берут Python или Go — в bash сложно безопасно работать с пробелами в путях, JSON, юникодом.

Где встречается bash, кроме терминала

  • Скрипты в /etc/profile.d/ — выполняются при логине, настраивают переменные окружения.
  • ~/.bashrc — конфиг интерактивной bash-сессии: алиасы, подсказка PS1, подключение bash-completion.
  • pre-commit и post-merge git-хуки — обычно тоже на bash.
  • Dockerfile-инструкция RUN — каждая RUN запускает /bin/sh -c "…". Если нужен bash, явно — RUN bash -c "…" или SHELL ["/bin/bash", "-c"].
  • CI/CD пайплайны — GitHub Actions и GitLab CI по умолчанию запускают bash -e -o pipefail на runner-ах с Linux.
  • systemd-юнитыExecStart= поддерживает шебанг-скрипты, хотя для длинных конвейеров принято писать отдельные .sh-файлы.

То есть bash живёт почти везде, где есть Linux-сервер. Знание bash — это не про «писать большие приложения», а про «склеивать существующие утилиты в полезные пайплайны».

Версии bash и где они различаются

Текущая мейнстрим-версия — bash 5.x (5.0 вышла в 2019, 5.2 в 2022). На Ubuntu 24.04 LTS — bash 5.2. Что важно знать про версии:

  • bash 4.0+ — добавлены ассоциативные массивы (declare -A), mapfile, ${var^^} для верхнего регистра.
  • bash 5.0+wait -n, EPOCHREALTIME, исправления в parser-е.
  • bash 3.2 — версия на macOS до сих пор (Apple зафиксировал её из-за GPLv3-лицензии bash 4+). Если пишете скрипт, который должен работать на маках без brew install bash, держитесь синтаксиса 3.2.

В bash-скриптах для CI и dotfiles стоит проверять версию через ${BASH_VERSION%%.*} и предупреждать пользователя, если она ниже нужной.

Частые вопросы

Чем bash отличается от Linux

bash — это всего лишь оболочка, программа /bin/bash. Linux — это ядро + вся ОС вокруг. Терминал, в котором вы видите приглашение, — это работающая копия bash. Если её снести (apt remove bash, что в Ubuntu невозможно — пакет защищён), терминал останется, но не сможет ничего выполнить, пока вы не зальёте альтернативу.

Что такое bash.org

bash.org — старый сайт с базой смешных цитат из IRC, не имеет отношения к самой оболочке. Часто люди ищут «bash org» именно туда. Сайт de facto мёртв с 2017 года. К утилите /bin/bash он отношения не имел никогда.

Где документация по bash

Лучшие источники: man bash (длинная и подробная), info bash (с примерами), официальный мануал на gnu.org/software/bash, и Bash Reference Manual в виде PDF. Для учёбы — книга «Learning the bash Shell» от O'Reilly.

Как узнать версию bash

bash --version
# или
echo $BASH_VERSION

Что писать в шебанге — #!/bin/bash или #!/usr/bin/env bash

#!/bin/bash — короче, гарантированно работает на Linux (там /bin/bash есть всегда). #!/usr/bin/env bash — портабельнее, ищет bash через $PATH, что важно на macOS, где «современный» bash живёт в /usr/local/bin/bash или /opt/homebrew/bin/bash. Для прод-серверов на Ubuntu разницы нет — пишите как короче.

Что почитать

Похожие материалы

Сроки поддержки Ubuntu LTS — на сколько хватает релиза
Глоссарий

Сроки поддержки Ubuntu LTS — на сколько хватает релиза

Ubuntu LTS — это релиз с долгой поддержкой: 5 лет бесплатных security-обновлений и 10 лет с подпиской Ubuntu Pro. Промежуточные релизы (24.10, 25.04) живут всего 9 месяцев. Разбираем, какие версии сейчас актуальны, до какой даты безопасно сидеть на 22.04 и 24.04, и когда выходит 26.04 LTS.

Редакция
Debian или Ubuntu — что выбрать
Глоссарий

Debian или Ubuntu — что выбрать

Debian и Ubuntu — две родственные операционные системы: Ubuntu сделана на базе Debian и тянет оттуда пакеты, формат `.deb` и пакетный менеджер apt. Различия — в скорости релизов, наборе из коробки и философии. Кратко: Debian Stable консервативнее и аскетичнее, Ubuntu LTS — свежее и удобнее, особенно для рабочего стола и облаков. Под прод подходят оба, выбор сводится к тому, что вам важнее: предсказуемость или новизна.

Редакция
Ubuntu — что это и зачем
Глоссарий

Ubuntu — что это и зачем

Ubuntu — самый популярный дистрибутив Linux: бесплатная операционная система на базе Debian, удобная и для серверов, и для рабочего стола. Под капотом Linux-ядро, поверх — пакетный менеджер apt, рабочий стол GNOME (на Desktop) и стек systemd-сервисов. Релизы выходят каждые полгода, LTS-версии — раз в два года и поддерживаются 5 лет.

Редакция
grep — что это и зачем
Глоссарий

grep — что это и зачем

grep — стандартная команда Linux для поиска строк по шаблону внутри текстовых файлов и потоков. Берёт текст на вход, отдаёт строки, в которых нашлось совпадение. Базовый инструмент работы с логами, конфигами, выводом других команд через пайп.

Редакция