📖 Работа со скриптами: теория

К оглавлению урока

⚡ Ключевые концепции

  • Скрипт — небольшая программа, последовательность автоматических действий.
  • Первая строка: #!/bin/bash — shebang, указывает интерпретатор.
  • Запуск: chmod +x script.sh затем ./script.sh или bash script.sh.
  • Конструкция if: if [ условие ]; then ...; else ...; fi — пробелы внутри [ ] обязательны!
  • Аргументы: $1 — первый, $# — количество, $0 — имя скрипта.
  • $RANDOM — случайное число от 0 до 32767.
  • exit 1 — завершить скрипт с кодом ошибки.

Что такое скрипт

Определение
Скрипт — это небольшая программа, которая содержит последовательность действий, созданных для автоматического выполнения задачи.

Bash-скрипт — это текстовый файл с набором команд оболочки Bash. Вместо того чтобы вводить команды вручную каждый раз, вы записываете их в файл и запускаете одной командой.

Shebang — первая строка скрипта

Строка #!/bin/bash называется shebang (или hashbang). Она должна быть самой первой строкой файла. Она сообщает операционной системе, какой интерпретатор использовать для выполнения скрипта.

# script_NAME.sh
#!/bin/bash
# Это комментарий
echo "Hello, World!"
  • #! — символ shebang
  • /bin/bash — путь к интерпретатору Bash
  • Строки, начинающиеся с #, — комментарии (кроме shebang)
Важно: пробел после #!
#! /bin/bash (с пробелом) — некоторые системы не распознают как shebang.
Правильно: #!/bin/bash — без пробела между #! и путём.

Запуск скрипта

Есть три способа запустить bash-скрипт:

# Способ 1: сделать исполняемым и запустить напрямую
chmod +x script.sh
./script.sh

# Способ 2: вызвать через bash явно (не нужно chmod +x)
bash script.sh

# Способ 3: вызвать через sh (POSIX-совместимый)
sh script.sh

Способ 1 — наиболее распространённый в production. Способ 2 удобен при разработке и отладке.

Задача 1 — Скрипт-информатор системы

Написать скрипт script_ВАШЕИМЯ.sh, который выводит системную информацию.

Что должен делать скрипт:

  • Выводит приветствие
  • Показывает текущий каталог (pwd)
  • Выводит список всех процессов (ps -ef)
  • Показывает текущую дату и время (date)
  • Проверяет наличие файлов с ключевым словом "error" в /var/log/ (grep)
  • Выводит содержимое файла /etc/os-release (cat)
  • Подсчитывает количество строк в /etc/os-release (wc -l)
  • Выводит последние 5 строк /etc/os-release (tail -n 5)
  • Выводит информацию о пользователях из /etc/passwd через awk
  • Выводит сообщение о завершении

Задача 2 — Скрипт создания файлов

Разобрать скрипт, который создаёт файлы с временными метками, организует их по дате и выводит содержимое.

Ключевые конструкции:

  • DATE=`date '+%d-%m-%y'` — захват вывода команды в переменную (обратные кавычки)
  • for i in {1..5}; do ... done — цикл 5 итераций
  • sleep 5 — пауза 5 секунд между итерациями
  • mkdir -p $DATE — создать директорию с именем = дата
  • cp File*.txt $DATE — скопировать файлы в директорию

Задача 3 — Проверка: файл или директория

Конструкция if/else/fi — основа условной логики в bash.

if [ условие ]; then
    # выполняется если условие истинно
else
    # выполняется если условие ложно
fi

Проверка типа файла:

  • [ -d "$FILE" ] — является ли $FILE директорией
  • [ -f "$FILE" ] — является ли $FILE обычным файлом
  • [ -e "$FILE" ] — существует ли $FILE вообще
Пробелы внутри [ ] обязательны!
if [ -d "$FILE" ] — правильно: пробелы после [ и перед ]
if [-d "$FILE"] — неправильно: bash не распознает как проверку условия

Задача 4 — Аргументы и $RANDOM

Bash-скрипты могут принимать аргументы из командной строки:

./script.sh 5   # запуск с аргументом 5

Специальные переменные:

  • $1 — первый аргумент (в примере — число файлов)
  • $2, $3, ... — второй, третий аргументы
  • $# — количество переданных аргументов
  • $0 — имя самого скрипта
  • $RANDOM — случайное целое число от 0 до 32767

Завершение скрипта с кодом ошибки:

exit 1   # завершить скрипт с кодом 1 (ошибка)
exit 0   # завершить скрипт с кодом 0 (успех, используется по умолчанию)

Проверка переданных аргументов:

if [ $# -eq 0 ]; then
    echo "Error: no arguments provided. Usage: $0 <num_files>"
    exit 1
fi

Поведение скрипта при ошибке в команде

Важный факт о Bash-скриптах
По умолчанию, если в скрипте встретилась команда с ошибкой (неверный путь, несуществующий файл), скрипт не останавливается — он продолжает выполнять следующие строки. Чтобы скрипт останавливался при первой ошибке, добавьте в начало:
set -e