Bash
Зовнішній вигляд
kill -9 1234
npm install
'''Terminal — це вікно. Чи підходить Bash? Інструмент
say_hello "Anna"
== tar ==
directory="$1"
<syntaxhighlight lang="bash">
find "$directory" -type f
done
Приклад резервного копіювання PostgreSQL:
Bash і Git
'''Якщо Linux-сервер — це машина, то Bash — це панель керування, через яку розробник або адміністратор запускає, перевіряє, ремонтує й автоматизує роботу системи.'''
<syntaxhighlight lang="bash">
done
fi
echo "one"; echo "two"
! git push
Перевірити код останньої команди:
<syntaxhighlight lang="bash">
echo "$name"
Примусово завершити: </syntaxhighlight>
echo "Config missing"
</syntaxhighlight>
<syntaxhighlight lang="bash">
scp file.txt user@example.com:/home/user/
</blockquote>
Створити каталог:
<syntaxhighlight lang="bash">
Створимо файл <code>hello.sh</code>:
Запустити Bash:
Приклад:
Дізнатися шлях до Bash:
Символ pipe:
<blockquote>
ps aux
== Головна ідея Bash ==
fi
</syntaxhighlight>
Bash і cron
</syntaxhighlight> </syntaxhighlight>
curl -O https://example.com/install.sh
Bash в ERP-інфраструктурі
Приклад: pip install -r requirements.txt
echo "Database backup created"
exit 1
Приклад для PHP:
echo "First argument: $1"
Рекомендовано:
echo "Hello, Bash!"
</syntaxhighlight>
Неправильно: Скопіювати файл:
Redirect
| 0 | Успішне виконання |
| не 0 | Помилка або особливий стан |
echo "Directory does not exist: $directory"
Пошук у каталозі:
'''ShellCheck''' — інструмент для перевірки Bash/shell-скриптів. Пояснення
<syntaxhighlight lang="bash">
grep -i "error" app.log
! Запис
У Bash дуже критично правильно використовувати лапки. -name "*.log"
<syntaxhighlight lang="bash">
! fi
Приклади:
|-
| '''ОС'''
| Linux, macOS або WSL у Windows
|-
| '''Shell'''
| Bash
|-
| '''Редактор'''
| VS Code, Vim або Nano
|-
| '''Перші команди'''
| ls, cd, cat, grep, find
|-
| '''Перший скрипт'''
| hello.sh або backup.sh
|-
| '''Перевірка'''
| ShellCheck
|-
| '''Практика'''
| Логи, backup, Git, Docker, cron
|}
Підключення з ключем:
== set -euo pipefail ==
echo "Arguments count: $#"
echo "Config exists"
<syntaxhighlight lang="bash">
Видалити файл:
for file in *.txt; do
Знайти всі log-файли:
* роботи з Linux;
* серверного адміністрування;
* автоматизації;
* backup;
* CI/CD;
* Docker;
* Git;
* cron;
* аналізу логів;
* деплою;
* ERP-інфраструктури;
* щоденної роботи розробника. Рекомендація
git status
Класичний варіант:
<syntaxhighlight lang="bash">
|-
| <code>rm</code>
| Видаляє файли
|-
| <code>rm -r</code>
| Видаляє каталоги з вмістом
|-
| <code>chmod -R</code>
| Масово змінює права
|-
| <code>chown -R</code>
| Масово змінює власника
|-
| <code>dd</code>
| здатна перезаписати диск або розділ
|-
| <code>mkfs</code>
| Форматує файлову систему
|}
exec "$@"
Приклад для Python:
echo "Config not found"
Змінні середовища доступні дочірнім процесам. command -v bash
Опція
Bash і Docker</syntaxhighlight> echo "$PATH" ! Пояснення
<syntaxhighlight lang="bash">
Якщо команда не запускається, можливо, її немає в PATH. Пояснення
! Bash виступає як розвитком класичної оболонки '''sh''' і став однією з найпоширеніших shell-оболонок у світі Unix/Linux. Значення
Bash дає можливість вводити команди вручну або записувати їх у файл-скрипт. {| class="wikitable"
|-
| 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
|}
Bash потрібен для:
Команда <code>echo</code> виводить текст у консоль. Значення
<syntaxhighlight lang="bash">
Функція без аргументів:
#!/usr/bin/env bash
Приклад:
{| class="wikitable"
Знайти бізнес-процес:
sudo apt update
<syntaxhighlight lang="bash">
find /var/log -type f -size +100M
echo "Починаємо роботу" </syntaxhighlight> echo "$count" </syntaxhighlight> echo $filename find шукає файли й каталоги.== grep == Типові задачі: |
</syntaxhighlight>
awkcat app.log | grep "error"
<blockquote>
</syntaxhighlight>
</blockquote>
git clone https://example.com/repo.git
'''Bash — це не без зусиль оболонка. echo "Hello" > hello.txt
shellcheck script.sh
tar -xzf backup.tar.gz
'''Команда з <code>sudo</code> здатна змінити систему.== Bash і CI/CD ==
</syntaxhighlight>
хвилина година день_місяця місяць день_тижня команда
! Як застосовується для Bash
</syntaxhighlight>
[[Категорія:CI/CD]]
! Значення
mkdir -p backup
else
mkdir -p logs/2026/may
<syntaxhighlight lang="bash">
Виконати другу команду, якщо перша завершилась помилкою:
</syntaxhighlight>
echo "Дорослий"
composer install
<syntaxhighlight lang="bash">
export APP_ENV=production
<syntaxhighlight lang="bash">
if [ -f "$1" ]; then
</syntaxhighlight>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Замінити текст:
Вивести рядки з 10 по 20:
<syntaxhighlight lang="bash">
Запуск через bash:
</syntaxhighlight>
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
<blockquote>
curl https://example.com
|-
| '''755'''
| власник здатна все, інші можуть читати й виконувати
|-
| '''644'''
| власник здатна читати й писати, інші тільки читати
|-
| '''600'''
| тільки власник здатна читати й писати
|}
</syntaxhighlight>
!== sed ==
less install.sh
</syntaxhighlight>
<syntaxhighlight lang="bash">
</blockquote>
== Bash, Shell і Terminal ==
</blockquote>
[[Категорія:Unix]]
== ShellCheck ==
</syntaxhighlight>
<syntaxhighlight lang="bash">
</syntaxhighlight>
як приклад, вручну можна виконати:
Копіювання файлу через scp:
set -euo pipefail
echo "Strict mode enabled"
<syntaxhighlight lang="bash">
chmod +x script.sh
Створити змінну середовища:
</syntaxhighlight>
== Цикл while ==
Приклад:
[[Категорія:Командний рядок]]
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
npm test
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
git commit -m "Update"
</syntaxhighlight>
<syntaxhighlight lang="bash">
count=$((count + 1))
Створити архів:
</syntaxhighlight>
ssh -i key.pem user@example.com
Redirect перенаправляє введення або виведення. Напрям
name = "Anna"
</syntaxhighlight>
docker run app
== Bash і backup ==
Приклад перевірки місця на диску:
backup_dir="/backups/postgres"
|-
| <code>set -e</code>
| завершити скрипт при помилці
|-
| <code>set -u</code>
| помилка при використанні невизначеної змінної
|-
| <code>set -o pipefail</code>
| pipe вважається помилковим, якщо помилилась будь-яка команда в ланцюжку
|}
'''Bash перетворює командний рядок на мову автоматизації.'''
</syntaxhighlight>
#!/usr/bin/env bash
</syntaxhighlight>
grep "error" app.log
</syntaxhighlight>
<syntaxhighlight lang="bash">
'''ssh''' застосовується для для підключення до сервера. Задача
</syntaxhighlight>
<blockquote>
echo "Name is not empty"
</syntaxhighlight>
|-
| <code>></code>
| записати результат у файл, перезаписавши його
|-
| <code>>></code>
| додати результат у кінець файлу
|-
| <code><</code>
| взяти вхідні інформаційні дані з файлу
|-
| <code>2></code>
| перенаправити помилки
|}
<syntaxhighlight lang="bash">
! Значення
</syntaxhighlight>
chmod +x hello.sh
a=5
|-
| <code>"$var"</code>
| Підставляє змінну й зберігає пробіли
|-
| <code>'$var'</code>
| Не підставляє змінну
|-
| <code>$var</code>
| Підставляє змінну, але здатна зламатися на пробілах
|}
'''PATH''' — це список каталогів, у яких Bash шукає виконувані команди. return 0
{| class="wikitable"
<syntaxhighlight lang="bash">
!<syntaxhighlight lang="bash">
Правильно:
echo "Script name: $0"
<syntaxhighlight lang="bash">
== Типові помилки новачків ==
chmod 755 script.sh
<syntaxhighlight lang="bash">
if [ -n "$name" ]; then
|-
| '''Доступність'''
| Bash виступає як майже на кожному Linux-сервері
|-
| '''Швидкість автоматизації'''
| Багато задач можна цифровізувати за кілька рядків
|-
| '''інтеграційні функції ERP з Unix-утилітами'''
| grep, find, awk, sed, tar, curl, ssh
|-
| '''Потужні pipes'''
| Команди швидко поєднувати
|-
| '''Добрий для DevOps'''
| Deployment, CI/CD, backup, Docker
|-
| '''Простий старт'''
| Перші команди швидко вивчити
|-
| '''Ідеальний для серверів'''
| Linux-сервери часто адмініструються через Bash
|}
== find ==
npm run build
{| class="wikitable"
z=$((20 / 4))
|-
| '''Складність великих скриптів'''
| Bash погано підходить для великих програм
|-
| '''Проблеми з quoting'''
| Пробіли й спецсимволи часто створюють помилки
|-
| '''Слабка типізація'''
| Усе здебільшого виступає як текстом
|-
| '''Небезпечні команди'''
| Помилка здатна видалити або змінити важливі файли
|-
| '''Погана читабельність складної логіки'''
| Для складних задач краще Python, Go або інша мова
|-
| '''Різниця між sh і bash'''
| Bash-скрипт здатна не працювати в sh
|}
sum=$((a + b))
Більш переносимий варіант:
</syntaxhighlight>
<syntaxhighlight lang="bash">
|-
| '''Не ставити лапки навколо змінних'''
| Пробіли в іменах файлів можуть зламати скрипт
|-
| '''Писати <code>name = value</code>'''
| У Bash так не оголошуються змінні
|-
| '''Плутати <code>></code> і <code>>></code>'''
| <code>></code> перезаписує файл, <code>>></code> додає
|-
| '''Запускати <code>rm -r</code> без перевірки'''
| Можна видалити важливі файли
|-
| '''Використовувати Bash-синтаксис із <code>#!/bin/sh</code>'''
| sh здатна не підтримувати Bash-можливості
|-
| '''Ігнорувати exit code'''
| Скрипт здатна продовжитись після помилки
|-
| '''Зберігати паролі в скрипті'''
| Це небезпечно
|}
Запуск:
fi
echo "Цей рядок виконається"
</syntaxhighlight>
|-
| автоматизація процесів команд
| style="background:#d4edda; color:#155724; font-weight:bold;" | Дуже добре
|-
| Linux server administration
| style="background:#d4edda; color:#155724; font-weight:bold;" | Дуже добре
|-
| Backup-скрипти
| style="background:#d4edda; color:#155724; font-weight:bold;" | Добре
|-
| CI/CD steps
| style="background:#d4edda; color:#155724; font-weight:bold;" | Добре
|-
| Логи й текстові файли
| style="background:#d4edda; color:#155724; font-weight:bold;" | Дуже добре
|-
| Docker entrypoint
| style="background:#d4edda; color:#155724; font-weight:bold;" | Добре
|-
| Великий бізнес-застосунок
| style="background:#f8d7da; color:#721c24; font-weight:bold;" | Не підходить
|-
| Складна обробка даних
| style="background:#fff3cd; color:#856404; font-weight:bold;" | Можливо, але краще Python
|-
| Web frontend
| style="background:#f8d7da; color:#721c24; font-weight:bold;" | Не підходить
|}
find . Код
#!/usr/bin/env bash
= Bash =
</syntaxhighlight>
== Арифметика ==
<syntaxhighlight lang="bash">
</syntaxhighlight>
== xargs ==
== Висновок ==
</syntaxhighlight>
Bash часто використовують у Docker entrypoint-скриптах. Перед виконанням треба уважно перевірити шлях.'''
fi
== Робота з каталогами ==
</syntaxhighlight>
{| class="wikitable"
Послідовне виконання:
</syntaxhighlight>
<syntaxhighlight lang="bash">
bash install.sh
|-
| <code> "$a" = "$b" </code>
| рядки рівні
|-
| <code> "$a" != "$b" </code>
| рядки не рівні
|-
| <code> -z "$a" </code>
| рядок порожній
|-
| <code> -n "$a" </code>
| рядок не порожній
|}
<blockquote>
echo "$filename"
command || echo "Command failed"
}
== Quoting ==
! grep -R "database" . Компонент
</syntaxhighlight>
<syntaxhighlight lang="bash">
'''sed''' застосовується для для потокового редагування тексту. ! Перевага
== Мінімальний набір для старту ==
Перебір значень:
[[Категорія:Мови програмування]]
<syntaxhighlight lang="bash">
echo "Готово"
== Порівняння рядків ==
</syntaxhighlight>
== Хороші практики Bash ==
Приклад:
</syntaxhighlight>
echo "Starting application..."
find . Порівняння з Bash
<syntaxhighlight lang="bash">
! Вираз
#!/usr/bin/env bash
count=1
'''Bash — це інструмент, який дає можливість керувати системою, запускати команди й цифровізувати повторювану роботу через скрипти.'''
filename="my file.txt"
</syntaxhighlight>
Показати всі змінні середовища:
<syntaxhighlight lang="bash">
</syntaxhighlight>
== Функції ==
Зробити скрипт виконуваним:
<blockquote>
Завантажити файл:
|-
| <code>-eq</code>
| дорівнює
|-
| <code>-ne</code>
| не дорівнює
|-
| <code>-gt</code>
| більше
|-
| <code>-ge</code>
| більше або дорівнює
|-
| <code>-lt</code>
| менше
|-
| <code>-le</code>
| менше або дорівнює
|}
sed -n '10,20p' file.txt
! Значення
mv notes.txt notes_old.txt
check_file() {
|-
| '''Використовувати <code>set -euo pipefail</code>'''
| Скрипт краще реагує на помилки
|-
| '''Брати змінні в лапки'''
| Захист від пробілів і спецсимволів
|-
| '''Перевіряти аргументи'''
| Скрипт має пояснювати, що очікує
|-
| '''Не хардкодити паролі'''
| Секрети мають бути в environment variables або secret storage
|-
| '''Логувати дії'''
| Легше розбирати помилки
|-
| '''Використовувати ShellCheck'''
| Автоматична перевірка скриптів
|-
| '''Розділяти складну логіку на функції'''
| Скрипт легше читати й підтримувати
|}
cp *.txt backup/
! Вивести першу колонку:
</syntaxhighlight>
<syntaxhighlight lang="bash">
grep -n "error" app.log
#!/bin/bash
!== Умови if ==
grep "error" app.log | wc -l
{| class="wikitable"
== Встановлення і доступність ==
pg_dump "$database" > "$backup_dir/$database-$date.sql"
if [ ! -name "config.yml"
<syntaxhighlight lang="bash">
<blockquote>
mkdir -p "$backup_dir"
tar -czf backup.tar.gz folder/
say_hello
echo $? Небезпечні команди треба перевіряти до запуску.'''
Знайти каталоги:
== конкурентні переваги Bash ==
</syntaxhighlight>
{| class="wikitable"
</syntaxhighlight>
== Shebang ==
find . age=18
У Bash змінні створюються без пробілів навколо знака <code>=</code>. Символ
! Вираз
Розпакувати архів:
if [ "$count" -gt 10 ]; then
Кожна команда повертає код завершення. Змінна
#!/usr/bin/env bash
<syntaxhighlight lang="bash">
== Джерела ==
-d '{"name":"Anna"}'
echo "Listing files in: $directory"
</syntaxhighlight>
echo "Hello"
if [ "$age" -ge 18 ]; then
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
!<syntaxhighlight lang="bash">
! tar -tzf backup.tar.gz
== PATH ==
</syntaxhighlight>
'''Pipe''' передає результат однієї команди в іншу.</syntaxhighlight>
if [ "$#" -ne 1 ]; then
<syntaxhighlight lang="bash">
<blockquote>
<syntaxhighlight lang="bash">
* GNU Bash Manual: https://www.gnu.org/software/bash/manual/
* GNU Bash: https://www.gnu.org/software/bash/
* POSIX Shell Command Language: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
* ShellCheck: https://www.shellcheck.net/
* GNU Coreutils Manual: https://www.gnu.org/software/coreutils/manual/
* Linux man-pages: https://www.kernel.org/doc/man-pages/
<syntaxhighlight lang="bash">
POST-запит із JSON:
git add . Приклади
Приклад пошуку великих файлів:
#!/usr/bin/env bash
Знайти бізнес-процес:
</syntaxhighlight>
-H "Content-Type: application/json" \
</syntaxhighlight>
Порахувати суму другої колонки:
Запуск:
date=$(date +%Y-%m-%d-%H-%M-%S)
database="erp_database"
[[Категорія:Bash]]
'''chmod''' змінює права доступу. Показати домашній каталог:
!<syntaxhighlight lang="bash">
set -e
== Цикл for ==
<blockquote>
exit 1
== curl ==
* помилки quoting;
* невизначені змінні;
* небезпечні конструкції;
* проблеми переносимості;
* типові помилки Bash. Значення
backup_dir="/backups/$date"
Коментарі починаються з символу <code>#</code>. Практика
== Процеси ==
== Bash у порівнянні з іншими інструментами ==
y=$((4 * 5))
== sudo ==
<syntaxhighlight lang="bash">
set -euo pipefail
{| class="wikitable"
[[Категорія:Docker]]
bash
</syntaxhighlight>
</syntaxhighlight>
Виконати другу команду тільки якщо перша успішна:
Окремо варто відзначити яка широко застосовують, коли потрібно в Linux, Unix-подібних системах, macOS, DevOps, CI/CD, адмініструванні серверів, автоматизації задач, роботі з файлами, логами, процесами, Docker, Git і іншими інструментами командного рядка виступає ключовою рисою '''Bash''' або '''Bourne Again SHell'''. Значення
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
[[Категорія:DevOps]]
Показати PATH:
if [ -f "config.yml" ]; then
!</syntaxhighlight>
<syntaxhighlight lang="bash">
</syntaxhighlight>
У Bash-скриптах часто використовують суворіші конфігурація. Параметр
! Приклад:
Приклад:
Приклади команд Docker:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
</blockquote>
== Логічні оператори ==
'''xargs''' створює команди з вхідних даних. if check_file "config.yml"; then
}
<syntaxhighlight lang="bash">
! ! Пошук у файлі:
! На більшості Linux-систем Bash уже встановлений. Чому небезпечна
echo "Config exists"
<syntaxhighlight lang="bash">
rm notes_old.txt
echo "Hello from Bash script"
== Змінні ==
Безпечніший варіант для файлів із пробілами:
{| class="wikitable"
Створити файл:
<syntaxhighlight lang="bash">
Функція з аргументом:
echo "$HOME"
./script.sh hello world
</syntaxhighlight>
rm -r reports
Знайти файл:
Приклад умови:
Або:
</syntaxhighlight>
bash --version
</syntaxhighlight>
docker build -t app . Значення
<syntaxhighlight lang="bash">
Подивитися вміст:
</syntaxhighlight>
== Змінні середовища ==
ls /unknown 2> errors.log
'''Bash''' — один із найважливіших інструментів у Linux, DevOps і серверній розробці. Значення
'''Команда <code>rm</code> видаляє файли. Пояснення
<syntaxhighlight lang="bash">
mkdir -p "$backup_dir"
</syntaxhighlight>
else
<syntaxhighlight lang="bash">
mkdir reports
ls -la
</syntaxhighlight>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
! Етап
</syntaxhighlight>
{| class="wikitable"
bash hello.sh
touch notes.txt
* backup бази даних;
* імпорт файлів;
* експорт звітів;
* архівування логів;
* запуск нічних обмінів;
* синхронізація каталогів;
* запуск міграцій;
* перевірка сервісів;
* моніторинг дискового простору;
* оновлення версій застосунку. '''У Bash немає кнопки “скасувати”. Приклад команд збірки:
|-
| <code>$0</code>
| Назва скрипта
|-
| <code>$1</code>
| Перший аргумент
|-
| <code>$2</code>
| Другий аргумент
|-
| <code>$@</code>
| Усі аргументи
|-
| <code>$#</code>
| Кількість аргументів
|}
Знайти файли, змінені за останню добу:
curl -X POST https://api.example.com/users \
#!/usr/bin/env bash
'''cron''' застосовується для для запуску задач за розкладом. це командна оболонка і мова скриптів. while [ "$count" -le 5 ]; do
curl -O https://example.com/file.zip
<blockquote>
== Для чого застосовується для Bash ==
docker logs container_name
[[Категорія:Linux]]
</syntaxhighlight>
</blockquote>
{| class="wikitable"
<syntaxhighlight lang="bash">
</syntaxhighlight>
{| class="wikitable"
</syntaxhighlight>
Типові команди Git у Bash:
</syntaxhighlight>
'''У Bash пробіли навколо <code>=</code> при присвоєнні змінної не ставляться.'''
</syntaxhighlight>
! '''curl''' застосовується для для HTTP-запитів і завантаження файлів. -name "*.tmp" -print0 | xargs -0 rm
curl https://example.com/install.sh | bash
{| class="wikitable"
</syntaxhighlight>
|-
| '''sh'''
| Bash має більше можливостей, але sh більш переносимий
|-
| '''Zsh'''
| Zsh зручніший як інтерактивна shell, Bash частіше застосовується для в скриптах
|-
| '''Fish'''
| Fish зручний для користувача, але не сумісний із Bash-синтаксисом
|-
| '''PowerShell'''
| PowerShell сильний у Windows і функціонує з обʼєктами, Bash сильний у Unix/Linux
|-
| '''Python'''
| Python краще для складної логіки, Bash краще для склеювання команд
|-
| '''Go'''
| Go краще для надійних CLI-утиліт, Bash швидший для простих скриптів
|}
{| class="wikitable"
<syntaxhighlight lang="bash">
'''awk''' застосовується для для обробки тексту й колонок. -mtime -1
Перебір файлів:
! Приклад:
kill 1234
== Коментарі ==
== chmod ==
Bash часто застосовується для в CI/CD.</syntaxhighlight>
== Робота з файлами ==
echo "Usage: $0 <directory>"
Показати процеси:
echo "Backup completed: $backup_dir"
</syntaxhighlight>
== Bash і PostgreSQL backup ==
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="bash">
'''grep''' шукає текст. -type d
== Коли Bash — хороший вибір ==
</syntaxhighlight>
pytest
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
ls /unknown-folder
Відкрити crontab:
! Ці поняття часто плутають. Оператор
Клонування:
</syntaxhighlight>
== Pipes ==
<syntaxhighlight lang="bash">
Пошук без урахування регістру:
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
|
<syntaxhighlight lang="bash">
== Перший Bash-скрипт ==
set -euo pipefail
</syntaxhighlight>
say_hello() {
echo "Більше ніж 10"
</syntaxhighlight>
crontab -e
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Приклад:
done
else
</blockquote>
== ssh ==
</syntaxhighlight>
! Чому це проблема
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
== Перша команда ==
<syntaxhighlight lang="bash">
</syntaxhighlight>
|-
| <code>-f file</code>
| існує звичайний файл
|-
| <code>-d dir</code>
| існує каталог
|-
| <code>-e path</code>
| шлях існує
|-
| <code>-r file</code>
| файл доступний для читання
|-
| <code>-w file</code>
| файл доступний для запису
|-
| <code>-x file</code>
| файл виконуваний
|}
echo "$sum"
<syntaxhighlight lang="bash">
== Безпечна робота зі скриптами ==
<syntaxhighlight lang="bash">
'''Для сучасних Bash-скриптів часто використовують <code>#!/usr/bin/env bash</code>, бо він шукає Bash через PATH.'''
fi
sed 's/old/new/g' file.txt
ps aux | grep nginx
! cp notes.txt backup/notes.txt
<syntaxhighlight lang="bash">
</blockquote>
fi
</syntaxhighlight>
</syntaxhighlight>
Порахувати кількість помилок:
! -name "*.tmp" | xargs rm
! Її треба виконувати тільки коли зрозуміло, що саме вона робить.'''
<syntaxhighlight lang="bash">
! Що означає
! Bash — це оболонка, яка всередині цього вікна виконує команди.'''
Інші приклади:
ps aux | grep nginx
== Рекомендований шлях навчання Bash ==
./hello.sh
</syntaxhighlight>
== Перевірка файлів і каталогів ==
|-
| '''Назва'''
| Bash
|-
| '''Повна назва'''
| Bourne Again SHell
|-
| '''Тип'''
| Командна оболонка і мова скриптів
|-
| '''Походження'''
| дорожня карта розвитку Bourne shell
|-
| '''Основні системи'''
| Linux, Unix, macOS, BSD, WSL
|-
| '''Файли скриптів'''
| .sh, .bash
|-
| '''Головні сфери'''
| DevOps, Linux, сервери, CI/CD, автоматизація процесів, backup, deployment
|-
| '''Складність для новачків'''
| Низька для базових команд, середня для скриптів, висока для складної автоматизації
|-
| '''офіційний проєкт'''
| GNU Bash
|}
awk '{print $1}' access.log
<syntaxhighlight lang="bash">
<blockquote>
x=$((10 - 3))
</blockquote>
</syntaxhighlight>
Небезпечний підхід:
<syntaxhighlight lang="bash">
#!/usr/bin/env bash
name="Anna"
docker ps
</syntaxhighlight>
</blockquote>
== Недоліки Bash ==
'''Команда <code>rm -r</code> здатна видалити цілий каталог разом із файлами.'''
Безпечніше:
Або записати набір команд у файл:
== Приклад якісного Bash-скрипта ==
<syntaxhighlight lang="bash">
== Небезпечні команди ==
name="Anna"
== Порівняння чисел ==
|-
| '''Terminal'''
| Програма-вікно, через яку користувач системи вводить команди
|-
| '''Shell'''
| Командна оболонка, яка приймає й виконує команди
|-
| '''Bash'''
| Один із найпопулярніших різновидів shell
|-
| '''Shell script'''
| Файл із командами shell
|}
echo "File: $file"
find . Недолік
#!/usr/bin/env bash
Або зробити файл виконуваним:
'''Pipes — одна з найсильніших ідей Bash: прості команди можна поєднувати в потужні ланцюжки.'''
echo "$PATH"
set -euo pipefail
== Exit code ==
df -h
== Коротко ==
<syntaxhighlight lang="bash">
Типові права:
echo "Exit code: $?"
#!/usr/bin/env bash
<syntaxhighlight lang="bash">
Запуск скрипта щодня о 02:00:
<syntaxhighlight lang="bash">
Приклад:
</syntaxhighlight>
Перевірити версію Bash:
! awk '{sum += $2} END {print sum}' data.txt
<syntaxhighlight lang="bash">
echo "$item"
</blockquote>
say_hello() {
! Команда
! Це універсальний інструмент, який дає можливість перетворювати ручні дії в повторювані, контрольовані й автоматизовані процеси.'''
}
великих програм зі складною бізнес-логікою забезпечується через Bash не виступає як найкращим вибором; так само реалізовано але він незамінний для командного рядка, серверів і автоматизації. Bash-скрипт здатна приймати аргументи. -d "$directory" ]; then
! Термін
<blockquote>
</syntaxhighlight>
which bash
mkdir build && cd build
![[Категорія:Автоматизація]]
set -euo pipefail
Створити вкладені каталоги:
ShellCheck оптимізує знайти:
== Аргументи скрипта ==
== Простими словами ==
'''У Bash майже завжди краще писати змінні в подвійних лапках: <code>"$var"</code>.'''
Bash підтримує арифметичні вирази. 0 2 * * * /home/user/backup.sh
GET-запит:
</syntaxhighlight>
<syntaxhighlight lang="bash">
Формат:
{| class="wikitable"
<syntaxhighlight lang="bash">
find . Що вивчати
b=7
</syntaxhighlight>
'''Shebang''' — це перший рядок скрипта, який вказує, якою програмою запускати файл. count=15
return 1
|-
| '''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
|}
fi
</blockquote>
<syntaxhighlight lang="bash">
|
echo "Hello, $1"
</syntaxhighlight> echo "Неповнолітній" Приклад: |
|---|