Перейти до вмісту

Bash

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні
Версія від 18:28, 6 травня 2026, створена R (обговорення | внесок) (Створена сторінка: = Bash = '''Bash''' або '''Bourne Again SHell''' — це командна оболонка і мова скриптів, яка широко використовується в Linux, Unix-подібних системах, macOS, DevOps, CI/CD, адмініструванні серверів, автоматизації задач, роботі з файлами, логами, процесами, Docker, Git та іншими інструментам...)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)

Bash

Bash або Bourne Again SHell — це командна оболонка і мова скриптів, яка широко використовується в Linux, Unix-подібних системах, macOS, DevOps, CI/CD, адмініструванні серверів, автоматизації задач, роботі з файлами, логами, процесами, Docker, Git та іншими інструментами командного рядка.

Bash є розвитком класичної оболонки sh і став однією з найпоширеніших shell-оболонок у світі Unix/Linux.

Bash — це інструмент, який дозволяє керувати системою, запускати команди й автоматизувати повторювану роботу через скрипти.

Коротко

Параметр Значення
Назва Bash
Повна назва Bourne Again SHell
Тип Командна оболонка і мова скриптів
Походження Розвиток Bourne shell
Основні системи Linux, Unix, macOS, BSD, WSL
Файли скриптів .sh, .bash
Головні сфери DevOps, Linux, сервери, CI/CD, автоматизація, backup, deployment
Складність для новачків Низька для базових команд, середня для скриптів, висока для складної автоматизації
Офіційний проєкт GNU Bash

Головна ідея Bash

Bash дозволяє вводити команди вручну або записувати їх у файл-скрипт.

Наприклад, вручну можна виконати:

ls -la

Або записати набір команд у файл:

#!/usr/bin/env bash

echo "Починаємо роботу"

mkdir -p backup
cp *.txt backup/

echo "Готово"

Bash перетворює командний рядок на мову автоматизації.

Bash, Shell і Terminal

Ці поняття часто плутають.

Термін Що означає
Terminal Програма-вікно, через яку користувач вводить команди
Shell Командна оболонка, яка приймає й виконує команди
Bash Один із найпопулярніших різновидів shell
Shell script Файл із командами shell

Terminal — це вікно. Bash — це оболонка, яка всередині цього вікна виконує команди.

Для чого використовується Bash

Напрям Як використовується Bash Приклади
Linux-адміністрування Керування серверами, файлами, сервісами systemctl, journalctl, ssh
DevOps Автоматизація deployment, CI/CD, Docker deploy.sh, build.sh, backup.sh
Backend Запуск сервісів, тестів, міграцій npm, php artisan, python manage.py
Робота з файлами Пошук, копіювання, архівація find, cp, tar, rsync
Логи Аналіз журналів системи й застосунків grep, tail, awk, sed
Backup Резервне копіювання файлів і баз pg_dump, tar, rsync
CI/CD Команди збірки й тестування GitHub Actions, GitLab CI
ERP-інфраструктура Обміни, нічні задачі, імпорт/експорт cron, shell scripts, database dumps

Встановлення і доступність

На більшості Linux-систем Bash уже встановлений.

Перевірити версію Bash:

bash --version

Дізнатися шлях до Bash:

which bash

Або:

command -v bash

Запустити Bash:

bash

Перша команда

echo "Hello, Bash!"

Команда echo виводить текст у консоль.

Перший Bash-скрипт

Створимо файл hello.sh:

#!/usr/bin/env bash

echo "Hello from Bash script"

Запуск через bash:

bash hello.sh

Або зробити файл виконуваним:

chmod +x hello.sh
./hello.sh

Shebang

Shebang — це перший рядок скрипта, який вказує, якою програмою запускати файл.

Класичний варіант:

#!/bin/bash

Більш переносимий варіант:

#!/usr/bin/env bash

Для сучасних Bash-скриптів часто використовують #!/usr/bin/env bash, бо він шукає Bash через PATH.

Коментарі

Коментарі починаються з символу #.

# Це коментар

echo "Цей рядок виконається"

Змінні

У Bash змінні створюються без пробілів навколо знака =.

Правильно:

name="Anna"
echo "$name"

Неправильно:

name = "Anna"

У Bash пробіли навколо = при присвоєнні змінної не ставляться.

Quoting

У Bash дуже важливо правильно використовувати лапки.

Запис Значення
"$var" Підставляє змінну й зберігає пробіли
'$var' Не підставляє змінну
$var Підставляє змінну, але може зламатися на пробілах

Рекомендовано:

filename="my file.txt"

echo "$filename"

Небажано:

echo $filename

У Bash майже завжди краще писати змінні в подвійних лапках: "$var".

Змінні середовища

Змінні середовища доступні дочірнім процесам.

Показати домашній каталог:

echo "$HOME"

Показати PATH:

echo "$PATH"

Створити змінну середовища:

export APP_ENV=production

Показати всі змінні середовища:

env

PATH

PATH — це список каталогів, у яких Bash шукає виконувані команди.

Приклад:

echo "$PATH"

Якщо команда не запускається, можливо, її немає в PATH.

Аргументи скрипта

Bash-скрипт може приймати аргументи.

Змінна Значення
$0 Назва скрипта
$1 Перший аргумент
$2 Другий аргумент
$@ Усі аргументи
$# Кількість аргументів

Приклад:

#!/usr/bin/env bash

echo "Script name: $0"
echo "First argument: $1"
echo "Arguments count: $#"

Запуск:

./script.sh hello world

Exit code

Кожна команда повертає код завершення.

Код Значення
0 Успішне виконання
не 0 Помилка або особливий стан

Перевірити код останньої команди:

echo $?

Приклад:

ls /unknown-folder

echo "Exit code: $?"

Умови if

Приклад умови:

#!/usr/bin/env bash

age=18

if [ "$age" -ge 18 ]; then
  echo "Дорослий"
else
  echo "Неповнолітній"
fi

Порівняння чисел

Оператор Значення
-eq дорівнює
-ne не дорівнює
-gt більше
-ge більше або дорівнює
-lt менше
-le менше або дорівнює

Приклад:

count=15

if [ "$count" -gt 10 ]; then
  echo "Більше ніж 10"
fi

Порівняння рядків

Вираз Значення
"$a" = "$b" рядки рівні
"$a" != "$b" рядки не рівні
-z "$a" рядок порожній
-n "$a" рядок не порожній

Приклад:

name="Anna"

if [ -n "$name" ]; then
  echo "Name is not empty"
fi

Перевірка файлів і каталогів

Вираз Значення
-f file існує звичайний файл
-d dir існує каталог
-e path шлях існує
-r file файл доступний для читання
-w file файл доступний для запису
-x file файл виконуваний

Приклад:

if [ -f "config.yml" ]; then
  echo "Config exists"
else
  echo "Config not found"
fi

Цикл for

Перебір файлів:

for file in *.txt; do
  echo "File: $file"
done

Перебір значень:

for item in apple banana orange; do
  echo "$item"
done

Цикл while

count=1

while [ "$count" -le 5 ]; do
  echo "$count"
  count=$((count + 1))
done

Арифметика

Bash підтримує арифметичні вирази.

a=5
b=7

sum=$((a + b))

echo "$sum"

Інші приклади:

x=$((10 - 3))
y=$((4 * 5))
z=$((20 / 4))

Функції

Функція без аргументів:

say_hello() {
  echo "Hello"
}

say_hello

Функція з аргументом:

say_hello() {
  echo "Hello, $1"
}

say_hello "Anna"

Функція з кодом повернення:

check_file() {
  if [ -f "$1" ]; then
    return 0
  else
    return 1
  fi
}

if check_file "config.yml"; then
  echo "Config exists"
else
  echo "Config missing"
fi

Pipes

Pipe передає результат однієї команди в іншу.

Символ pipe:

|

Приклад:

cat app.log | grep "error"

Порахувати кількість помилок:

grep "error" app.log | wc -l

Знайти процес:

ps aux | grep nginx

Pipes — одна з найсильніших ідей Bash: прості команди можна поєднувати в потужні ланцюжки.

Redirect

Redirect перенаправляє введення або виведення.

Символ Значення
> записати результат у файл, перезаписавши його
>> додати результат у кінець файлу
< взяти вхідні дані з файлу
2> перенаправити помилки

Приклади:

echo "Hello" > hello.txt
echo "New line" >> hello.txt
ls /unknown 2> errors.log

Логічні оператори

Виконати другу команду тільки якщо перша успішна:

mkdir build && cd build

Виконати другу команду, якщо перша завершилась помилкою:

command || echo "Command failed"

Послідовне виконання:

echo "one"; echo "two"

set -euo pipefail

У Bash-скриптах часто використовують суворіші налаштування.

set -euo pipefail
Опція Значення
set -e завершити скрипт при помилці
set -u помилка при використанні невизначеної змінної
set -o pipefail pipe вважається помилковим, якщо помилилась будь-яка команда в ланцюжку

Приклад:

#!/usr/bin/env bash

set -euo pipefail

echo "Strict mode enabled"

Робота з файлами

Створити файл:

touch notes.txt

Скопіювати файл:

cp notes.txt backup/notes.txt

Перейменувати або перемістити:

mv notes.txt notes_old.txt

Видалити файл:

rm notes_old.txt

Команда rm видаляє файли. Перед виконанням треба уважно перевірити шлях.

Робота з каталогами

Створити каталог:

mkdir reports

Створити вкладені каталоги:

mkdir -p logs/2026/may

Видалити каталог із вмістом:

rm -r reports

Команда rm -r може видалити цілий каталог разом із файлами.

grep

grep шукає текст.

Пошук у файлі:

grep "error" app.log

Пошук без урахування регістру:

grep -i "error" app.log

Пошук у каталозі:

grep -R "database" .

Показати номери рядків:

grep -n "error" app.log

find

find шукає файли й каталоги.

Знайти файл:

find . -name "config.yml"

Знайти всі log-файли:

find . -name "*.log"

Знайти каталоги:

find . -type d

Знайти файли, змінені за останню добу:

find . -mtime -1

awk

awk використовується для обробки тексту й колонок.

Вивести першу колонку:

awk '{print $1}' access.log

Порахувати суму другої колонки:

awk '{sum += $2} END {print sum}' data.txt

sed

sed використовується для потокового редагування тексту.

Замінити текст:

sed 's/old/new/g' file.txt

Вивести рядки з 10 по 20:

sed -n '10,20p' file.txt

xargs

xargs створює команди з вхідних даних.

Приклад:

find . -name "*.tmp" | xargs rm

Безпечніший варіант для файлів із пробілами:

find . -name "*.tmp" -print0 | xargs -0 rm

tar

Створити архів:

tar -czf backup.tar.gz folder/

Розпакувати архів:

tar -xzf backup.tar.gz

Подивитися вміст:

tar -tzf backup.tar.gz

curl

curl використовується для HTTP-запитів і завантаження файлів.

GET-запит:

curl https://example.com

Завантажити файл:

curl -O https://example.com/file.zip

POST-запит із JSON:

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name":"Anna"}'

ssh

ssh використовується для підключення до сервера.

ssh user@example.com

Підключення з ключем:

ssh -i key.pem user@example.com

Копіювання файлу через scp:

scp file.txt user@example.com:/home/user/

chmod

chmod змінює права доступу.

Зробити скрипт виконуваним:

chmod +x script.sh

Типові права:

Значення Пояснення
755 власник може все, інші можуть читати й виконувати
644 власник може читати й писати, інші тільки читати
600 тільки власник може читати й писати

Приклад:

chmod 755 script.sh

sudo

sudo запускає команду з правами адміністратора.

sudo apt update

Команда з sudo може змінити систему. Її треба виконувати тільки коли зрозуміло, що саме вона робить.

Процеси

Показати процеси:

ps aux

Знайти процес:

ps aux | grep nginx

Завершити процес:

kill 1234

Примусово завершити:

kill -9 1234

Bash і cron

cron використовується для запуску задач за розкладом.

Відкрити crontab:

crontab -e

Запуск скрипта щодня о 02:00:

0 2 * * * /home/user/backup.sh

Формат:

хвилина година день_місяця місяць день_тижня команда

Bash і Git

Типові команди Git у Bash:

git status
git add .
git commit -m "Update"
git push

Клонування:

git clone https://example.com/repo.git

Bash і Docker

Приклади команд Docker:

docker ps
docker build -t app .
docker run app
docker logs container_name

Bash часто використовують у Docker entrypoint-скриптах.

Приклад:

#!/usr/bin/env bash

set -e

echo "Starting application..."

exec "$@"

Bash і CI/CD

Bash часто використовується в CI/CD.

Приклад команд збірки:

npm install
npm test
npm run build

Приклад для PHP:

composer install
vendor/bin/phpunit

Приклад для Python:

pip install -r requirements.txt
pytest

Bash і backup

Приклад backup-скрипта:

#!/usr/bin/env bash

set -euo pipefail

date=$(date +%Y-%m-%d)
backup_dir="/backups/$date"

mkdir -p "$backup_dir"

tar -czf "$backup_dir/files.tar.gz" /var/www

echo "Backup completed: $backup_dir"

Bash і PostgreSQL backup

Приклад резервного копіювання PostgreSQL:

#!/usr/bin/env bash

set -euo pipefail

date=$(date +%Y-%m-%d-%H-%M-%S)
database="erp_database"
backup_dir="/backups/postgres"

mkdir -p "$backup_dir"

pg_dump "$database" > "$backup_dir/$database-$date.sql"

echo "Database backup created"

Bash в ERP-інфраструктурі

Bash може бути корисним для ERP-систем.

Типові задачі:

  • backup бази даних;
  • імпорт файлів;
  • експорт звітів;
  • архівування логів;
  • запуск нічних обмінів;
  • синхронізація каталогів;
  • запуск міграцій;
  • перевірка сервісів;
  • моніторинг дискового простору;
  • оновлення застосунку.

Приклад перевірки місця на диску:

df -h

Приклад пошуку великих файлів:

find /var/log -type f -size +100M

Небезпечні команди

Команда Чому небезпечна
rm Видаляє файли
rm -r Видаляє каталоги з вмістом
chmod -R Масово змінює права
chown -R Масово змінює власника
dd Може перезаписати диск або розділ
mkfs Форматує файлову систему

У Bash немає кнопки “скасувати”. Небезпечні команди треба перевіряти до запуску.

Безпечна робота зі скриптами

Небезпечний підхід:

curl https://example.com/install.sh | bash

Безпечніше:

curl -O https://example.com/install.sh
less install.sh
bash install.sh

ShellCheck

ShellCheck — інструмент для перевірки Bash/shell-скриптів.

Запуск:

shellcheck script.sh

ShellCheck допомагає знайти:

  • помилки quoting;
  • невизначені змінні;
  • небезпечні конструкції;
  • проблеми переносимості;
  • типові помилки Bash.

Хороші практики Bash

Практика Пояснення
Використовувати set -euo pipefail Скрипт краще реагує на помилки
Брати змінні в лапки Захист від пробілів і спецсимволів
Перевіряти аргументи Скрипт має пояснювати, що очікує
Не хардкодити паролі Секрети мають бути в environment variables або secret storage
Логувати дії Легше розбирати помилки
Використовувати ShellCheck Автоматична перевірка скриптів
Розділяти складну логіку на функції Скрипт легше читати й підтримувати

Приклад якісного Bash-скрипта

#!/usr/bin/env bash

set -euo pipefail

if [ "$#" -ne 1 ]; then
  echo "Usage: $0 <directory>"
  exit 1
fi

directory="$1"

if [ ! -d "$directory" ]; then
  echo "Directory does not exist: $directory"
  exit 1
fi

echo "Listing files in: $directory"

find "$directory" -type f

Переваги Bash

Перевага Пояснення
Доступність Bash є майже на кожному Linux-сервері
Швидкість автоматизації Багато задач можна автоматизувати за кілька рядків
Інтеграція з Unix-утилітами grep, find, awk, sed, tar, curl, ssh
Потужні pipes Команди легко поєднувати
Добрий для DevOps Deployment, CI/CD, backup, Docker
Простий старт Перші команди легко вивчити
Ідеальний для серверів Linux-сервери часто адмініструються через Bash

Недоліки Bash

Недолік Пояснення
Складність великих скриптів Bash погано підходить для великих програм
Проблеми з quoting Пробіли й спецсимволи часто створюють помилки
Слабка типізація Усе здебільшого є текстом
Небезпечні команди Помилка може видалити або змінити важливі файли
Погана читабельність складної логіки Для складних задач краще Python, Go або інша мова
Різниця між sh і bash Bash-скрипт може не працювати в sh

Типові помилки новачків

Помилка Чому це проблема
Не ставити лапки навколо змінних Пробіли в іменах файлів можуть зламати скрипт
Писати name = value У Bash так не оголошуються змінні
Плутати > і >> > перезаписує файл, >> додає
Запускати rm -r без перевірки Можна видалити важливі файли
Використовувати Bash-синтаксис із #!/bin/sh sh може не підтримувати Bash-можливості
Ігнорувати exit code Скрипт може продовжитись після помилки
Зберігати паролі в скрипті Це небезпечно

Коли Bash — хороший вибір

Задача Чи підходить Bash?
Автоматизація команд Дуже добре
Linux server administration Дуже добре
Backup-скрипти Добре
CI/CD steps Добре
Логи й текстові файли Дуже добре
Docker entrypoint Добре
Великий бізнес-застосунок Не підходить
Складна обробка даних Можливо, але краще Python
Web frontend Не підходить

Bash у порівнянні з іншими інструментами

Інструмент Порівняння з Bash
sh Bash має більше можливостей, але sh більш переносимий
Zsh Zsh зручніший як інтерактивна shell, Bash частіше використовується в скриптах
Fish Fish зручний для користувача, але не сумісний із Bash-синтаксисом
PowerShell PowerShell сильний у Windows і працює з обʼєктами, Bash сильний у Unix/Linux
Python Python краще для складної логіки, Bash краще для склеювання команд
Go Go краще для надійних CLI-утиліт, Bash швидший для простих скриптів

Рекомендований шлях навчання Bash

Етап Що вивчати
1 Terminal, shell, Bash
2 pwd, ls, cd
3 Робота з файлами: cp, mv, rm, mkdir
4 cat, less, head, tail
5 grep і find
6 Pipes і redirect
7 Змінні й quoting
8 Аргументи скрипта
9 if, test, перевірка файлів
10 for, while
11 functions
12 exit codes
13 set -euo pipefail
14 ShellCheck
15 cron, ssh, curl, tar
16 Docker, Git, CI/CD

Мінімальний набір для старту

Компонент Рекомендація
ОС Linux, macOS або WSL у Windows
Shell Bash
Редактор VS Code, Vim або Nano
Перші команди ls, cd, cat, grep, find
Перший скрипт hello.sh або backup.sh
Перевірка ShellCheck
Практика Логи, backup, Git, Docker, cron

Простими словами

Bash — це мова команд для Linux/Unix-світу.

Якщо Linux-сервер — це машина, то Bash — це панель керування, через яку розробник або адміністратор запускає, перевіряє, ремонтує й автоматизує роботу системи.

Висновок

Bash — один із найважливіших інструментів у Linux, DevOps і серверній розробці.

Bash потрібен для:

  • роботи з Linux;
  • серверного адміністрування;
  • автоматизації;
  • backup;
  • CI/CD;
  • Docker;
  • Git;
  • cron;
  • аналізу логів;
  • деплою;
  • ERP-інфраструктури;
  • щоденної роботи розробника.

Bash не є найкращим вибором для великих програм зі складною бізнес-логікою, але він незамінний для командного рядка, серверів і автоматизації.

Bash — це не просто оболонка. Це універсальний інструмент, який дозволяє перетворювати ручні дії в повторювані, контрольовані й автоматизовані процеси.

Джерела