Что такое скрипт
Скрипт — это небольшая программа, которая содержит последовательность действий, созданных для автоматического выполнения задачи.
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
Поведение скрипта при ошибке в команде
По умолчанию, если в скрипте встретилась команда с ошибкой (неверный путь, несуществующий файл), скрипт не останавливается — он продолжает выполнять следующие строки. Чтобы скрипт останавливался при первой ошибке, добавьте в начало:
set -e