Bash (Bourne Again SHell) - это язык командной строки и сценариев (скриптов), используемый для взаимодействия с Unix-подобными операционными системами. Он был создан в 1989 году Брайаном Фоксом в рамках проекта GNU как свободная замена оригинальной оболочки Bourne shell (sh).

Bash в основном используется в Linux, macOS и Unix-системах и является оболочкой по умолчанию в большинстве дистрибутивов Linux. Он позволяет пользователям выполнять команды, автоматизировать задачи и писать скрипты, объединяющие системные утилиты, программы и логику.

Bash широко применяется для:

  • Системного администрирования (управление пользователями, резервное копирование, мониторинг)
  • Управления серверами и VPS
  • Автоматизации задач
  • DevOps-процессов (CI/CD-пайплайны, Docker, cron)
  • Инструментов разработки (сборка проектов, настройка окружения).

Скрипты Bash особенно удобны для автоматизации, работы с файлами и управления процессами, поэтому знание Bash является важным навыком для разработчиков, DevOps-инженеров и системных администраторов.

Основы языка Bash

Basics

#!/usr/bin/env bash   # Указывает, что скрипт должен выполняться с помощью Bash

bash script.sh        # Запуск скрипта через интерпретатор Bash
chmod +x script.sh    # Делает файл исполняемым
./script.sh           # Запуск исполняемого скрипта

# Это комментарий     # Строка с # не выполняется

Variables (Переменные)

NAME="Aleksei"        # Объявление переменной (без пробелов!)
echo $NAME            # Вывод значения переменной
echo "${NAME}"        # Безопасный вывод переменной

DATE=$(date)          # Сохранение результата команды date в переменную

Input / Output (Ввод / вывод)

read VAR              # Читает ввод пользователя в переменную VAR
read -p "Имя: " NAME  # Выводит приглашение и читает ввод

echo "Hello $NAME"    # Вывод текста с подстановкой переменной

Script Arguments (Аргументы скрипта)

$0    # Имя скрипта
$1    # Первый аргумент
$2    # Второй аргумент
$@    # Все аргументы
$#    # Количество аргументов

Conditionals (Условия)

if [ "$A" = "test" ]; then   # Проверка: равна ли переменная A значению "test"
  echo "Match"              # Выполняется, если условие истинно
elif [ "$A" != "test" ]; then # Иначе если A не равно "test"
  echo "No match"
fi                          # Конец условия

Часто используемые проверки

-f file    # Файл существует
-d dir     # Каталог существует
-z "$VAR"  # Переменная пустая
-n "$VAR"  # Переменная не пустая

Loops (Циклы)

for

for i in 1 2 3; do     # Перебор значений
  echo $i             # Вывод текущего значения
done                  # Конец цикла
for file in *.txt; do # Перебор всех .txt файлов
  echo $file
done

while

while read line; do   # Читает файл построчно
  echo $line
done < file.txt      # Входные данные берутся из файла

Functions (Функции)

my_func() {           # Объявление функции
  echo "Hello $1"     # $1 — первый аргумент функции
}

my_func "World"      # Вызов функции

Arrays (Массивы)

ARR=(one two three)   # Создание массива
echo ${ARR[0]}        # Первый элемент массива
echo ${ARR[@]}        # Все элементы массива

Case (Аналог switch)

case "$1" in
  start) echo "Запуск" ;;     # Если аргумент = start
  stop)  echo "Остановка" ;; # Если аргумент = stop
  *)     echo "Используй start|stop" ;; # Значение по умолчанию
esac

Redirection & Pipes (Перенаправление)

cmd > file.txt        # Перезаписать файл выводом команды
cmd >> file.txt       # Добавить вывод в конец файла
cmd < file.txt        # Передать файл как ввод
cmd1 | cmd2           # Передать вывод одной команды в другую

Useful Commands (Полезные команды)

ls -la                # Показать файлы (включая скрытые)
cd /path              # Перейти в каталог
pwd                   # Показать текущий путь
cp src dst            # Копировать файл
mv old new            # Переименовать или переместить
rm -rf dir            # Удалить каталог рекурсивно (ОПАСНО)
grep "text" file      # Поиск текста в файле
find . -name "*.log"  # Поиск файлов по имени

Exit Codes (Коды выхода)

echo $?               # Код завершения последней команды
exit 0                # Успешное завершение
exit 1                # Завершение с ошибкой

Debugging (Отладка)

set -x                # Показывать выполняемые команды
set -e                # Остановить скрипт при ошибке