Перейти к основному содержимому

Простые приложения на Bash

Разработчику Архитектору

Простые приложения на Bash

Bash — оболочка и язык сценариев Linux/macOS/WSL. «Приложение» здесь — скрипт из команд и функций: бэкапы, разбор логов, health-check URL, пакетное переименование.

После первой программы и переменных.

Как запускать примеры из главы

  1. Сохраните скрипт в файл .sh, например backup.sh.
  2. Сделайте исполняемым: chmod +x backup.sh (Linux/macOS).
  3. Запуск: ./backup.sh аргументы или bash backup.sh аргументы.

Проверка: bash --version.


Резервное копирование файла

Как запустить

  • Файл: backup.sh
  • Команда: bash backup.sh notes.txt или ./backup.sh notes.txt
  • Результат: строка OK: backups/...
#!/usr/bin/env bash
set -euo pipefail

source="${1:?укажите файл}"
backup_dir="${2:-backups}"
mkdir -p "$backup_dir"
stamp=$(date +%Y%m%d-%H%M%S)
cp -- "$source" "$backup_dir/${stamp}_$(basename "$source")"
echo "OK: $backup_dir/${stamp}_$(basename "$source")"

set -euo pipefail — скрипт падает при ошибке, неинициализированной переменной и в пайпе.


Сортировка и подсчёт строк файла

Как запустить

  • Файл: sort_lines.sh
  • Подготовка: input.txt
  • Команда: bash sort_lines.sh
  • Результат: sorted.txt и число строк (wc).
#!/usr/bin/env bash
input="${1:-input.txt}"
output="${2:-sorted.txt}"
grep -v '^[[:space:]]*$' "$input" | sort -f > "$output"
wc -l "$output"

Проверка доступности URL (curl)

Как запустить

  • Файл: check_url.sh
  • Команда: bash check_url.sh
  • Нужно: curl в PATH, сеть.
  • Результат: OK https://example.com (200) или FAIL ....
#!/usr/bin/env bash
check_url() {
local url="$1"
local code
code=$(curl -o /dev/null -s -w '%{http_code}' --max-time 5 "$url" || echo "000")
if [[ "$code" =~ ^2 ]]; then
echo "OK $url ($code)"
else
echo "FAIL $url ($code)"
fi
}
check_url "https://example.com"

Поиск ошибок в логе

Как запустить

  • Файл: grep_errors.sh
  • Подготовка: app.log или передайте путь аргументом.
  • Команда: bash grep_errors.sh
  • Результат: до 20 последних строк с ERROR/FATAL.
#!/usr/bin/env bash
log="${1:-app.log}"
grep -E 'ERROR|FATAL|Exception' "$log" | tail -n 20

Пакетное переименование

Как запустить

  • Файл: rename.sh
  • Команда: bash rename.sh в каталоге с *.txt
  • Результат: файлы с префиксом backup_.
#!/usr/bin/env bash
shopt -s nullglob
prefix="backup_"
for f in *.txt; do
mv -- "$f" "${prefix}${f}"
done

Мониторинг диска

Как запустить

  • Файл: disk_alert.sh
  • Команда: bash disk_alert.sh
  • Результат: предупреждение, если занято ≥ 90% (порог в скрипте).
#!/usr/bin/env bash
df -h /
threshold=90
used=$(df / | awk 'NR==2 {gsub(/%/,"",$5); print $5}')
if (( used >= threshold )); then
echo "Внимание: диск заполнен на ${used}%"
fi

Простой «калькулятор»

Как запустить

  • Файл: calc.sh
  • Команда: bash calc.sh
  • Нужно: интерактивный ввод a, op, b.
  • Результат: целое число или сообщение об ошибке.
#!/usr/bin/env bash
read -r -p "a: " a
read -r -p "op (+ - * /): " op
read -r -p "b: " b
case "$op" in
+) echo "$((a + b))" ;;
-) echo "$((a - b))" ;;
\*) echo "$((a * b))" ;;
/) (( b != 0 )) && echo "$((a / b))" || echo "деление на ноль" ;;
*) echo "неизвестная операция" ;;
esac

Характерный пример — пайпы и подстановка

Как запустить

  • Файл: top_ips.sh
  • Подготовка: access.log (формат common log).
  • Команда: bash top_ips.sh
  • Результат: топ-5 IP по числу запросов.
#!/usr/bin/env bash
# Топ-5 IP в access.log
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5

Цепочка утилит — идиома Unix; Bash связывает их в один сценарий.


См. также: файлы и процессы · функции

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).