JavaRush /Курсы /Docker SELF /Введение в bash-скрипты: синтаксис, переменные, команды

Введение в bash-скрипты: синтаксис, переменные, команды

Docker SELF
3 уровень , 3 лекция
Открыта

1. Что такое bash-скрипты?

Если вы когда-либо думали: "Почему мне нужно повторять одни и те же команды снова и снова?", то поздравляю, вы готовы к bash-скриптам! Bash-скрипты — это способ автоматизировать работу в Linux с помощью написания последовательности команд в одном файле. Bash (Bourne Again Shell) — это не просто оболочка, это швейцарский нож для админов, программистов и всех, кто хочет заставить систему работать на себя.

Преимущества bash-скриптов

  • Экономия времени: Один раз написал — восемь раз запустил.
  • Повторяемость задач: Сценарии выполняются одинаково при каждом запуске (ну, если вы всё написали правильно).
  • Автоматизация рутины: Создайте настроенные команды для резервного копирования, мониторинга ресурсов или управления файлами.

2. Основы создания скриптов

Итак, давайте начнем. Bash-скрипт — это просто текстовый файл с набором команд. Но чтобы Linux понял, что это скрипт, а не случайные записи из дневника, нужно следовать определённым правилам.

Шаг 1: Название и формат файла

Bash-скрипты обычно имеют расширение .sh (но это необязательно). Например:

hello_world.sh
backup_script.sh

Шаг 2: Обязательная шапка

Каждый bash-скрипт начинается со строки:

#!/bin/bash

Эта строка называется шебанг (shebang) и говорит системе, что для выполнения скрипта нужно использовать интерпретатор /bin/bash. Без неё система просто посмотрит на ваш скрипт, грустно вздохнёт и ничего не сделает.

Шаг 3: Простейший скрипт

Давайте создадим и запустим скрипт, который выводит текст "Привет, мир!". В конце концов, почему бы и нет?

  1. Создаём файл:

    nano hello_world.sh
    
  2. Добавляем строки:

    #!/bin/bash
    echo "Привет, мир!"
  3. Делаем файл исполняемым:

    chmod +x hello_world.sh
    
  4. Запускаем скрипт:

    ./hello_world.sh
    

На экране вы увидите:

Привет, мир!

3. Работа с переменными

Переменные — это хранилище данных в вашем скрипте. Они делают скрипты гибкими и удобными.

Создание переменных

Чтобы объявить переменную, используйте формат:

ИМЯ_ПЕРЕМЕННОЙ="значение"

Пример:

NAME="Linux"
echo "Добро пожаловать в $NAME!"

Вывод:

Добро пожаловать в Linux!

Обратите внимание: между именем переменной и знаком = нельзя ставить пробелов. Если поставите, bash подумает, что вы пытаетесь написать что-то странное, и выдаст ошибку.

Встроенные переменные

Bash предоставляет несколько предопределённых переменных, например:

  • $USER — текущий пользователь.
  • $HOME — домашняя директория.
  • $PWD — текущая рабочая директория.

Попробуйте такой скрипт:

#!/bin/bash
echo "Привет, $USER!"
echo "Твоя домашняя директория: $HOME"
echo "Ты сейчас работаешь здесь: $PWD"

4. Получение данных от пользователя

Иногда скрипт должен получить данные от пользователя, чтобы работать. Для этого используется команда read.

Пример:

#!/bin/bash
echo "Как тебя зовут?"
read NAME
echo "Привет, $NAME!"

Запустив скрипт, вы сможете ввести своё имя, и скрипт поприветствует вас персонально.


5. Использование команд внутри скрипта

Bash позволяет выполнять команды так же, как если бы вы набирали их в терминале.

Например:

#!/bin/bash
echo "Текущая дата и время:"
date

Команда date выведет текущее время и дату, например:

Текущая дата и время:
Mon Oct 30 12:34:56 UTC 2023

Сохранение результата команды в переменной

Вы можете сохранить вывод команды в переменную с помощью $(). Это удобно для дальнейшей обработки данных.

Пример:

#!/bin/bash
CURRENT_DATE=$(date)
echo "Сейчас: $CURRENT_DATE"

6. Комментарии в скриптах

Всегда добавляйте комментарии, чтобы через месяц понять, что вы вообще писали. Используйте символ # для комментариев:

#!/bin/bash
# Это приветственный скрипт
echo "Добро пожаловать в мир Bash!"

Комментарии игнорируются интерпретатором и не влияют на выполнение.


7. Пример

Теперь напишем скрипт, который проверяет, существует ли файл.

  1. Создаём файл:

    nano file_checker.sh
    
  2. Добавляем код:

    #!/bin/bash
    
    # Запрос имени файла
    echo "Введите имя файла:"
    read FILE_NAME
    
    # Проверяем, существует ли файл
    if [ -f "$FILE_NAME" ]; then
        echo "Файл $FILE_NAME существует."
    else
        echo "Файл $FILE_NAME не найден."
    fi
  3. Делаем файл исполняемым и запускаем:

    chmod +x file_checker.sh
    ./file_checker.sh
    
  4. Пример работы скрипта:

    Введите имя файла:
    test.txt
    Файл test.txt существует.
    

8. Типичные ошибки

Работа с bash-скриптами приносит не только радость, но и иногда серьёзные ломания головы. Вот несколько распространённых ошибок:

  1. Пропущен шебанг.
    Без строки #!/bin/bash ваш скрипт может попытаться выполняться в другом интерпретаторе, что приведёт к ошибкам.

  2. Необъявленные переменные.
    Если вы случайно опечатались в имени переменной, bash воспримет её как пустую. Включите режим строгой проверки с помощью set -u в начале скрипта.

  3. Пробелы вокруг =.
    Никогда не пишите так: VARIABLE = "value". Это вызовет ошибку.

  4. Проблемы с правами.
    Если скрипт не имеет права на выполнение, добавьте его через chmod +x.

Практическое задание

  1. Напишите скрипт, который:

    • Запрашивает имя пользователя.
    • Выводит приветственную фразу.
    • Показывает текущую дату и время.
  2. Напишите скрипт, который:

    • Запрашивает у пользователя имя файла.
    • Создаёт файл, если он не существует, или сообщает, что файл уже есть.

Теперь вы знаете основы bash-скриптов! Осталось научиться добавлять условия и циклы, но это уже тема следующей лекции. Вперёд, к автоматизации мира!

1
Задача
Docker SELF, 3 уровень, 3 лекция
Недоступна
Приветственный скрипт
Приветственный скрипт
1
Задача
Docker SELF, 3 уровень, 3 лекция
Недоступна
Работа с переменными и командами
Работа с переменными и командами
1
Задача
Docker SELF, 3 уровень, 3 лекция
Недоступна
Скрипт проверки файла
Скрипт проверки файла
1
Задача
Docker SELF, 3 уровень, 3 лекция
Недоступна
Скрипт создания файла
Скрипт создания файла
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 11
24 сентября 2025
"Требуется использовать переменную не только для имени файла, но и для хранения результата проверки существования (например: exists=true/false). Сейчас результат проверки используется напрямую в условии, переменная результата отсутствует." Вот это вот условие нахрен здесь нужно?
Ilya Klimchev Уровень 1
8 сентября 2025
Новичок: echo "Привет, $USER! Добро пожаловать!" ? Валидатор: прости, брат. Без говнокода никак...