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-скрипте
Условные операторы 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

Использование циклов для повторения задач в 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).
Проверка и отладка
Перед использованием в продакшене протестируйте скрипт:
- Запускайте с разными аргументами, включая граничные случаи (пустые строки, несуществующие файлы).
- Используйте
set -xв начале скрипта или запускbash -x script.shдля пошагового вывода выполненных команд. - Добавьте
set -eдля автоматического выхода при ошибке любой команды иset -uдля ошибки при использовании неопределённой переменной. - Проверяйте коды возврата команд:
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и сигналы.
Эти инструменты расширят возможности ваших скриптов для сложных задач администрирования.