hostprofi.ru
Подобрать хостинг
Термин·буква B

Bash

краткое определение

Bash (Bourne Again Shell) — командная оболочка Unix/Linux и язык скриптов. Стандартный интерпретатор команд в большинстве Linux-дистрибутивов и macOS (до версии Catalina). Используется для автоматизации задач администрирования.

Bash (Bourne Again Shell) — командный интерпретатор и язык сценариев (shell scripting), стандартный для большинства Linux-дистрибутивов и macOS (до 2019 года). Является расширением оригинального sh (Bourne Shell, 1979). Bash — интерактивная оболочка для работы в терминале и язык для автоматизации: управление файлами, запуск программ, обработка текста, системное администрирование.

Основные конструкции

#!/bin/bash

# Переменные
NAME="server1"
echo "Hello, $NAME"

# Условие
if [ -f /etc/nginx/nginx.conf ]; then
  echo "Nginx config exists"
fi

# Цикл
for host in web1 web2 web3; do
  ssh $host "systemctl restart nginx"
done

# Функция
backup_db() {
  mysqldump -u root "$1" > "/backup/$1.sql"
}
backup_db mydb

История

Bourne Shell (sh) создан Стивом Борном (Steve Bourne) в Bell Labs в 1979 году. В 1989 году Брайан Фокс (Brian Fox) написал Bash для проекта GNU как замену sh с расширенными возможностями. Bash 1.0 вышел в 1989 году. Bash 2.0 (1996) добавил массивы. Bash 4.0 (2009) — ассоциативные массивы. Bash 5.0 (2019) — улучшения переменных и производительности. С macOS Catalina (2019) стандартной оболочкой стала Zsh вместо Bash (из-за лицензии GPL vs BSD).

Bash в системном администрировании

Bash-скрипты — основной инструмент автоматизации на Linux-сервере:

  • Cron-задачи для регулярного обслуживания: очистка логов, бэкапы, проверка доступности
  • Деплой через RSYNC/SCP с SSH: копирование файлов на удалённый сервер
  • Обработка вывода команд через pipe: ps aux | grep nginx | awk '{print $2}'
  • Мониторинг и алертинг: скрипты, проверяющие состояние сервисов через systemctl

Bash vs sh vs Zsh

ПараметрBash 5.2sh (POSIX)Zsh
POSIX-совместимостьДаЭталонДа
МассивыИндексные + ассоциативныеНетДа
АвтодополнениеBash-completionМинимальноеРасширенное (zsh-completions)
Интерактивный UXСреднийБазовыйВысокий

На что обращать внимание

Шаблоны для безопасных Bash-скриптов: всегда начинай с set -euo pipefail (выход при ошибке, необъявленных переменных, неудачном pipe). Кавычки обязательны для переменных: "$VAR", не $VAR — иначе пробелы в значении ломают скрипт. Для сложной логики (парсинг JSON, HTTP-запросы, работа с БД) используй Python — Bash не предназначен для сложной обработки данных. Проверяй скрипты через shellcheck.net перед запуском в продакшне.

История Bash

Bash (Bourne Again Shell) написан Брайаном Фоксом (Brian Fox) в 1989 году для проекта GNU как свободная замена sh (Bourne Shell, 1979). Версия 1.0 выпущена в 1989 году. Bash 2.0 (1996) добавил расширенные возможности программирования. Bash 3.0 (2004) — улучшенные регулярные выражения. Bash 4.0 (2009) — ассоциативные массивы. Bash 5.0 (2019) — расширенные возможности отладки. Apple заменила Bash на Zsh в macOS Catalina (2019) из-за лицензии GPLv3 (несовместима с политикой Apple). На серверах Bash остаётся стандартом де-факто.

Основные конструкции Bash-скриптов

#!/bin/bash
set -euo pipefail  # Выход при ошибке, не инициализированная переменная — ошибка

# Переменные
NAME="world"
echo "Hello, ${NAME}!"

# Условие
if [[ -f /etc/nginx/nginx.conf ]]; then
  echo "Nginx installed"
fi

# Цикл
for i in {1..5}; do
  echo "Iteration $i"
done

# Функция
backup() {
  local DIR="$1"
  tar -czf "${DIR}-$(date +%Y%m%d).tar.gz" "$DIR"
}
backup /var/www

На что обращать внимание

Всегда добавляй set -euo pipefail в начало скриптов: -e прерывает при ненулевом коде выхода, -u — при необъявленной переменной, -o pipefail — при ошибке в пайпе. Заключай переменные в кавычки: "$VAR" вместо $VAR — пробелы в значении не ломают логику. Для сложной обработки данных (JSON, HTTP) используй Python. Проверяй скрипты через shellcheck.net. Автоматические задачи запускай через crontab или systemd timer.

Другие термины