От команд к скриптам
В первых двух блоках мы работали с Linux как с набором команд. Нужно посмотреть текущую директорию — пишем pwd. Нужно создать файл — пишем touch. Нужно найти строку в логе — пишем grep. Нужно собрать цепочку обработки — соединяем команды через |.
Это уже рабочий уровень: вы можете перемещаться по файловой системе, создавать файлы, читать вывод команд, искать данные и аккуратно удалять ненужное.
Но в реальной работе быстро появляется другая проблема. Команды приходится повторять.
Представьте обычное утро разработчика. Нужно открыть терминал, перейти в директорию проекта, посмотреть свободное место, проверить список файлов, вывести дату и убедиться, что вы работаете под правильным пользователем. Каждая команда простая, но набор повторяется снова и снова.
Можно вводить всё руками. А можно записать эти команды в файл и запускать одной командой.
Такой файл называется скриптом.
Важная мысль: скрипт не заменяет команды, которые мы уже изучили. Он просто собирает их в повторяемую последовательность. Поэтому Bash-скриптинг начинается с уже знакомых echo, date, pwd, ls, df, grep, chmod и других команд.
Готовим учебную директорию
Для первого скрипта создадим отдельное место. Так мы не будем смешивать учебные файлы с остальными данными.
Вернитесь в домашнюю директорию:
cd
Создайте директорию для практики:
mkdir -p bash-practice
Перейдите внутрь:
cd bash-practice
Проверьте, где вы находитесь:
pwd
Вывод будет примерно таким:
/home/petr/bash-practice
Теперь всё, что мы создадим в этом уроке, будет лежать в отдельной учебной директории.
Создаём файл скрипта
Первый скрипт сделаем максимально простым: он поздоровается, покажет дату, текущую директорию и список файлов.
Откройте новый файл в nano:
nano hello.sh
Введите в файл такой текст:
#!/bin/bashМой первый Bash-скрипт
echo "Привет! Это мой первый скрипт." echo "" echo "Сейчас:" date echo "" echo "Текущая директория:" pwd echo "" echo "Файлы рядом со скриптом:" ls
Сохраните файл: нажмите Ctrl+O, затем Enter.
Выйдите из редактора: нажмите Ctrl+X.
Проверим, что файл появился:
ls -l
Вы увидите файл hello.sh. Пока это обычный текстовый файл.
Что делает первая строка
Первая строка скрипта выглядит необычно:
#!/bin/bash
Эта строка называется shebang. Она говорит системе, какой программой нужно выполнять файл.
Путь /bin/bash — это путь к программе Bash. Bash читает файл построчно и выполняет команды.
На первый взгляд #!/bin/bash похож на комментарий, потому что начинается с #. Но в первой строке сочетание #! имеет особый смысл для системы. Все остальные строки, которые начинаются с #, уже обычные комментарии.
Например:
# Мой первый Bash-скрипт
Эта строка не выполняется. Она нужна человеку, который читает файл.
Комментарии стоит писать там, где они объясняют смысл блока. Не нужно комментировать каждую очевидную команду, но полезно подписывать группы действий: проверка диска, подготовка файлов, очистка временной директории.
Почему скрипт сразу не запускается
Попробуем запустить файл как программу:
./hello.sh
Скорее всего, вы увидите ошибку:
bash: ./hello.sh: Permission denied
Это ожидаемо. Мы создали файл, но не дали ему право на выполнение.
В прошлом блоке мы уже видели права в выводе ls -l. Для скрипта сейчас важен символ x: он означает, что файл можно выполнять.
Посмотрите права:
ls -l hello.sh
Пример вывода:
-rw-r--r-- 1 petr petr 162 May 6 12:30 hello.sh
В правах нет x, поэтому система не запускает файл как программу.
Добавим право на выполнение:
chmod +x hello.sh
Проверим ещё раз:
ls -l hello.sh
Теперь в правах появится x:
-rwxr-xr-x 1 petr petr 162 May 6 12:30 hello.sh
Запустите скрипт:
./hello.sh
Вывод будет похож на такой:
Привет! Это мой первый скрипт.Сейчас: Tue May 6 12:31:04 UTC 2026
Текущая директория: /home/petr/bash-practice
Файлы рядом со скриптом: hello.sh
Мы запустили один файл, а Bash выполнил несколько команд подряд: echo, date, pwd, ls.
Зачем писать ./ перед именем
В команде запуска мы написали не просто hello.sh, а ./hello.sh.
Точка означает текущую директорию. Слеш отделяет директорию от имени файла. Поэтому ./hello.sh читается как «запусти файл hello.sh, который лежит прямо здесь».
Если написать только имя:
hello.sh
Bash может ответить:
hello.sh: command not found
Дело не в том, что файла нет. Дело в том, где Bash ищет команды.
Когда вы вводите ls, grep или chmod, Bash ищет эти программы в директориях из переменной $PATH. Текущая директория обычно туда не входит. Это сделано в том числе из соображений безопасности: случайный файл из текущей папки не должен запускаться просто потому, что его имя совпало с командой.
Второй способ запуска
Есть ещё один способ выполнить скрипт: передать файл Bash напрямую.
bash hello.sh
В этом случае вы явно говорите: «Bash, прочитай этот файл и выполни команды внутри».
Такой способ работает даже без права на выполнение:
chmod -x hello.sh
bash hello.sh
Почему? Потому что выполняется не сам файл hello.sh. Выполняется программа bash, а hello.sh передаётся ей как аргумент.
Но для обычных рабочих скриптов чаще используют первый вариант:
chmod +x hello.sh
./hello.sh
Так скрипт ведёт себя как самостоятельная программа. А shebang в первой строке подсказывает системе, какой интерпретатор нужен.
Делаем скрипт чуть полезнее
Теперь напишем скрипт, который похож на маленькую проверку рабочей директории. Он покажет пользователя, дату, текущее место, свободное место на диске и список файлов.
Откройте новый файл:
nano workspace_report.sh
Введите:
#!/bin/bashКороткий отчёт по текущей рабочей директории
echo "=== Отчёт по рабочей директории ===" echo ""
echo "Пользователь:" whoami echo ""
echo "Дата и время:" date echo ""
echo "Текущая директория:" pwd echo ""
echo "Свободное место для этой директории:" df -h . echo ""
echo "Файлы:" ls -la echo ""
echo "=== Готово ==="
Сохраните файл и выйдите из nano.
Сделайте скрипт исполняемым:
chmod +x workspace_report.sh
Запустите:
./workspace_report.sh
Этот скрипт всё ещё очень простой. Но он уже показывает главное преимущество скриптов: повторяемую последовательность действий можно запускать одной командой.
Сегодня это отчёт по учебной директории. Позже по тому же принципу можно будет писать скрипты для очистки временных файлов, проверки логов, подготовки проекта, резервного копирования или запуска нескольких команд перед деплоем.
Как читать простой скрипт
Хорошая привычка — читать скрипт сверху вниз и проговаривать действия обычными словами.
Например, workspace_report.sh делает такую последовательность:
- Запустить Bash через строку
#!/bin/bash. - Напечатать заголовок отчёта.
- Показать текущего пользователя через
whoami. - Показать дату через
date. - Показать текущую директорию через
pwd. - Показать свободное место через
df -h .. - Показать файлы через
ls -la. - Напечатать финальную строку.
Если скрипт нельзя прочитать таким способом, он слишком плотный для первого варианта. Разделяйте логические блоки пустыми строками, добавляйте короткие комментарии и проверяйте результат после каждого изменения.
Убираем учебные файлы
Если хотите очистить учебную директорию после урока, сначала убедитесь, где вы находитесь:
pwd
Если вы внутри bash-practice, можно удалить созданные скрипты:
rm hello.sh workspace_report.sh
Саму директорию можно оставить для следующих уроков. В блоке про Bash-скриптинг она ещё пригодится.
В следующем уроке мы добавим переменные. Они позволят не зашивать все значения прямо в команды, а хранить имена файлов, пути и настройки в отдельных местах скрипта.
Bash-скрипт — это текстовый файл с командами Bash. Команды выполняются сверху вниз, как если бы вы вводили их в терминал вручную.
Первая строка #!/bin/bash называется shebang. Она указывает системе, что скрипт нужно выполнять через Bash.
Строки с # обычно являются комментариями. Bash их игнорирует, а человек по ним понимает, что делает отдельный блок скрипта. Исключение — #! в самой первой строке.
Чтобы запустить скрипт как программу, нужно дать ему право на выполнение: chmod +x script.sh. После этого файл запускают по явному пути, например ./script.sh.
Запись ./script.sh означает «запустить файл из текущей директории». Просто script.sh обычно не сработает, потому что текущая директория не входит в $PATH.
Скрипт можно выполнить и вторым способом: bash script.sh. Тогда право на выполнение и shebang не обязательны, потому что вы напрямую запускаете Bash и передаёте ему файл.
Скрипты полезны там, где одни и те же команды нужно повторять: проверка рабочей директории, подготовка проекта, анализ логов, очистка временных файлов, запуск сервисных команд.
Зачем нужен ./
Почему скрипт из текущей директории обычно запускают как ./hello.sh, а не просто hello.sh?
Ключевые понятия
Соотнесите понятие с его ролью в Bash-скрипте.
Запуск скрипта
Восстановите порядок действий, чтобы создать и запустить скрипт как программу.
Способы запуска
Для каждого способа запуска выберите, что ему нужно.
Практика первого скрипта
Потренируйтесь запускать скрипт.
- Создайте директорию
~/bash-practiceи перейдите в неё. - Создайте файл
hello.sh. - Добавьте первой строкой
#!/bin/bash. - Ниже добавьте несколько команд:
echo,date,pwd,ls. - Сохраните файл и попробуйте запустить
./hello.sh. - Если увидите
Permission denied, выполнитеchmod +x hello.sh. - Запустите скрипт снова через
./hello.sh. - Для сравнения запустите его через
bash hello.sh.
Введите ровно тот вывод, который напечатает программа.
Подсказка
Подсказка: Скрипт выполняет команды сверху вниз. Если запуск через `./hello.sh` не работает, сначала проверьте права командой `ls -l hello.sh`.
Вопросы для самоконтроля
Ответьте своими словами.