Linux

Освойте основы написания скриптов в Linux Shell: от первых команд до запуска

Краткое введение в написание shell-скриптов для Linux: вы научитесь создавать, запускать и отлаживать скрипты, используя переменные, условия и циклы для автоматизации типовых задач.

Обновлено 27 апреля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Bash 4.4+Ubuntu 22.04 LTS и вышеDebian 11+CentOS 8+/Rocky Linux 8+

Введение / Зачем это нужно

Shell-скрипты позволяют автоматизировать рутину в Linux: резервное копирование, обслуживание логов, развёртывание и проверку систем. Вместо того чтобы вводить одни и те же команды каждый день, вы создаёте скрипт один раз и запускаете его за секунды. Это экономит время и снижает риск ошибок от опечаток.

После прочтения вы сможете создавать и запускать базовые скрипты, использовать переменные, условия и циклы, а также проверять результат и исправлять типовые ошибки.

Требования / Подготовка

  • Bash 4.4+ (входит в большинство современных дистрибутивов).
  • Любой текстовый редактор: nano, vim или VS Code.
  • Права на запись в рабочий каталог и выполнение файлов.
  • Базовое понимание командной строки: cd, ls, chmod.

Шаг 1: Создать файл скрипта и добавить shebang

Создайте файл с понятным именем, например hello.sh, и добавьте первой строкой shebang — это указывает, в каком shell выполнять скрипт:

#!/bin/bash

Сделайте файл исполняемым:

chmod +x hello.sh

💡 Совет: Если скрипт должен работать на разных системах, проверьте путь к bash через which bash. Для максимальной переносимости можно использовать #!/usr/bin/env bash.

Шаг 2: Добавить комментарии и переменные

Опишите цель скрипта и задайте переменные. Всегда заключайте строки с пробелами в двойные кавычки:

#!/bin/bash
# hello.sh — приветствие и информация о системе

user="Иван"
greeting="Добро пожаловать, $user"
echo "$greeting"
echo "Сегодня: $(date)"

Используйте $(command) для подстановки вывода команды в переменную или строку.

Шаг 3: Реализовать условия и циклы

Добавьте логику с помощью if и циклы для повторяющихся задач. Пример проверки существования файла:

file="/tmp/test.log"

if [[ -f "$file" ]]; then
  echo "Файл $file существует."
else
  echo "Файл $file не найден — создаю."
  touch "$file"
fi

Пример цикла for для обработки списка:

for name in Алиса Борис Виктор; do
  echo "Привет, $name"
done

И цикл while для чтения файла построчно:

while IFS= read -r line; do
  echo "Строка: $line"
done < "$file"

Шаг 4: Принимать аргументы и проверять коды возврата

Скрипт может получать параметры при запуске. Проверяйте их количество и используйте exit для завершения с кодом:

#!/bin/bash
# usage: ./greet.sh <имя>

if [[ $# -lt 1 ]]; then
  echo "Ошибка: укажите имя."
  exit 1
fi

name="$1"
echo "Здравствуйте, $name"

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

if cp source.txt backup.txt; then
  echo "Копирование успешно."
else
  echo "Копирование не удалось." >&2
  exit 2
fi

Шаг 5: Протестировать и отладить

Запустите скрипт в режиме отладки, чтобы видеть каждую выполненную команду:

bash -x hello.sh

Или добавьте временно в скрипт:

set -x   # включить отладку
# ваши команды
set +x   # отключить отладку

Проверьте:

  • Правильность путей и прав на файлы.
  • Корректность shebang.
  • Отсутствие скрытых символов (особенно при переносе из Windows).

Проверка результата

После правок запустите скрипт:

./hello.sh

Ожидаемый вывод должен содержать приветствие, текущую дату и результаты действий, прописанных в логике. Если поведение отличается, используйте bash -x и проверьте коды возврата команд.

Возможные проблемы

  • Permission denied — у файла нет прав на выполнение. Выполните chmod +x script.sh.
  • No such file or directory при запуске — проверьте shebang и наличие переносов строк (CRLF). Исправьте через dos2unix script.sh.
  • Скрипт выполняется в другом shell — без shebang запуск может пойти через текущий shell, что приведёт к ошибкам синтаксиса. Всегда указывайте #!/bin/bash или #!/usr/bin/env bash.
  • Переменные пустые или с пробелами — заключайте их в двойные кавычки внутри условий и команд: "$var".
  • Неожиданное завершение на ошибке — добавьте set -e в начало, чтобы скрипт прерывался при первой неудачной команде, или обрабатывайте коды возврата явно.

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

В чём разница между sh и bash при написании скриптов?
Почему скрипт не запускается по двойному клику или выдаёт «Permission denied»?
Как отлаживать скрипт, если он работает не так, как ожидалось?
Нужно ли всегда писать #!/bin/bash или можно обойтись без него?

Полезное

Создать файл скрипта и добавить shebang
Добавить комментарии и переменные
Реализовать условия и циклы
Принимать аргументы и проверять коды возврата
Протестировать и отладить

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