Linux

Bash скриптинг: основы для начинающих

Практическое руководство по основам bash-скриптинга. Вы освоите создание исполняемых скриптов, работу с переменными и аргументами, условные операторы, циклы и функции для автоматизации рутины в Linux.

Обновлено 4 апреля 2026 г.
20 мин
Низкая
FixPedia Team
Применимо к:Bash 4.0+Ubuntu 20.04+Debian 10+CentOS 7+

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

Создание и запуск первого скрипта

Начнём с минимального рабочего примера. Создайте файл hello.sh и откройте его в редакторе (nano hello.sh). Добавьте содержимое:

#!/usr/bin/env bash
echo "Привет, мир!"

Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano). Сделайте его исполняемым:

chmod +x hello.sh

Запустите из той же директории:

./hello.sh

Вывод: Привет, мир!. Если видите Permission denied, проверьте права через ls -l hello.sh и повторно выполните chmod +x.

Переменные и аргументы командной строки

Переменные хранят данные для повторного использования. Объявляйте без пробелов вокруг =:

USERNAME="Алексей"
echo "Добро пожаловать, $USERNAME!"

Для кавычек внутри значений используйте экранирование или внешние кавычки:

MESSAGE="Он сказал: \"Привет!\""

Аргументы делают скрипт гибким. Доступ к ним:

  • $1, $2 — первый, второй аргумент.
  • $@ — все аргументы как отдельные слова.
  • $# — количество аргументов.
  • $0 — имя скрипта.

Пример greet.sh с проверкой аргументов:

#!/usr/bin/env bash
if [ $# -eq 0 ]; then
    echo "Использование: $0 <имя>"
    exit 1
fi
echo "Привет, $1! Получено аргументов: $#"

Запуск: ./greet.sh Мария.

Пример bash-скрипта с переменными и аргументами командной строки

Использование переменных и аргументов в bash-скрипте

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

Условия позволяют ветвить логику. Базовый синтаксис:

if [ условие ]; then
    команды
elif [ другое_условие ]; then
    команды
else
    команды
fi

Пример: проверка количества аргументов

#!/usr/bin/env bash
if [ $# -lt 2 ]; then
    echo "Ошибка: нужно два аргумента."
    exit 1
fi
echo "Аргументы: $1 и $2"

Операторы сравнения:

  • Числа: -eq (равно), -ne (не равно), -lt (меньше), -le (меньше или равно), -gt (больше), -ge (больше или равно).
  • Строки: = (равно), != (не равно), -z (пустая строка), -n (не пустая).
  • Файлы: -e (существует), -f (обычный файл), -d (директория).

💡 Совет: Всегда заключайте переменные в двойные кавычки: [ -n "$VAR" ]. Это предотвратит ошибки, если переменная пуста или содержит пробелы.

Циклы

Циклы повторяют блок кода.

Цикл for:

# Перебор списка
for fruit in яблоко банан апельсин; do
    echo "Фрукт: $fruit"
done

# Перебор файлов .log
for log in *.log; do
    echo "Обработка $log"
done

Цикл while:

counter=1
while [ $counter -le 5 ]; do
    echo "Счётчик: $counter"
    ((counter++))
done

Цикл until (выполняется, пока условие ложно):

until [ $counter -gt 5 ]; do
    echo "Значение: $counter"
    ((counter++))
done
Примеры циклов for и while в bash-скрипте с кодом

Использование циклов для повторения задач в bash

Функции

Функции структурируют код и избегают дублирования.

#!/usr/bin/env bash

# Определение
print_time() {
    local message=$1
    echo "[$(date +%H:%M:%S)] $message"
}

# Вызов
print_time "Скрипт начался"
# ... ваш код ...
print_time "Скрипт завершён"
  • local создаёт переменную, видимую только внутри функции.
  • Функции возвращают статус через return (число 0-255) или вывод через echo (строка). Для захвата вывода используйте result=$(function_name).

Проверка и отладка

Перед использованием в продакшене протестируйте скрипт:

  1. Запускайте с разными аргументами, включая граничные случаи (пустые строки, несуществующие файлы).
  2. Используйте set -x в начале скрипта или запуск bash -x script.sh для пошагового вывода выполненных команд.
  3. Добавьте set -e для автоматического выхода при ошибке любой команды и set -u для ошибки при использовании неопределённой переменной.
  4. Проверяйте коды возврата команд: if ! command; then echo "Ошибка"; fi.

Типичные ошибки и решения

  • Permission denied: файл не исполняем. Решение: chmod +x script.sh.
  • No such file or directory при запуске: проблема в shebang. Используйте #!/usr/bin/env bash вместо #!/bin/bash.
  • Синтаксическая ошибка в условии: проверьте пробелы в [ ] — они обязательны: [ "$a" = "b" ], а не ["$a"="b"].
  • Пустые переменные в условиях: всегда заключайте в кавычки: [ -n "$VAR" ].
  • Потеря аргументов при вызове функции: передавайте явно: my_func "$@".
  • Неверный подсчёт аргументов: $# считает аргументы после обработки оболочкой. Если передаётся строка с пробелами в кавычках, это один аргумент.

Дальнейшие шаги

Освоив основы, изучите:

  • Обработку текста через grep, awk, sed.
  • Планирование задач через cron.
  • Работу с потоками ввода-вывода (<, >, >>, |).
  • Массивы и ассоциативные массивы в bash.
  • Отладку через trap и сигналы.

Эти инструменты расширят возможности ваших скриптов для сложных задач администрирования.

Часто задаваемые вопросы

Какой shebang выбрать: #!/bin/bash или #!/usr/bin/env bash?
Как правильно обрабатывать ошибки в bash-скрипте?
Чем отличается `[ ]` от `[[ ]]` в условиях?
Как передать в скрипт все файлы из текущей директории?

Полезное

Создайте файл скрипта
Добавьте shebang
Напишите команды
Сделайте файл исполняемым
Запустите скрипт

Эта статья помогла вам решить проблему?