Як перевірити exit status команди у Linux?
Коли запускаєш команди в Linux, не завжди очевидно, чи вони виконалися успішно. Іноді все виглядає нормально, але процес насправді «впав» із помилкою.
Щоб дізнатись, чи все пройшло як треба, існує exit status — спеціальний код, який повертає кожна команда після виконання.
Знати, як перевірити цей статус, важливо не лише для розуміння, чи все працює, а й для написання надійних Bash-скриптів. Гайда розбиратись, що це за код, як його перевірити та використовувати на практиці.
Що таке exit status у Linux?
Кожна команда, яку ти запускаєш у Linux, завершується певним кодом виходу (exit status або return code).
Це просто число, яке система повертає після виконання команди.
- 0 означає, що команда спрацювала успішно.
- Будь-яке інше число — що сталася помилка.
Приклади деяких помилок:
- 0 → «Все добре»
- 1 → «Сталася загальна помилка»
- 127 → «Команда не знайдена»
- 126 → «Команда знайдена, але не може бути виконана»
Linux не виводить ці коди автоматично, але зберігає їх у спеціальній змінній середовища під назвою $?.
І саме її можна використати, щоб дізнатись, як завершилась остання команда.
Як перевірити статус виходу команди?
Перевірка після успішної команди
Введи у терміналі:
ls
echo $?
Що тут відбувається:
- ls виводить список файлів у поточній директорії.
- Команда завершується успішно, тому Linux присвоює їй статус 0.
- Коли виконуєш echo $?, на екрані з’являється 0 — тобто все ок.
Перевірка після невдалої команди
Тепер спробуй щось, чого не існує:
ls /nonexistent
echo $?
Ця команда намагається відкрити директорію, якої немає.
ls повертає помилку, а Linux встановлює код виходу 2. Відповідно, echo $? виведе 2 — означає, що сталася помилка.
Як використовувати код виходу в Bash-скриптах?
Коди виходу особливо корисні у скриптах, коли потрібно перевірити, чи спрацювала команда, і виконати наступні дії залежно від результату.
Приклад:
#!/bin/bash
ls /etc > /dev/null
if [ $? -eq 0 ]; then
echo "Команда виконана успішно!"
else
echo "Помилка: команда не спрацювала."
fi
Що відбувається?
- Команда ls /etc намагається вивести список файлів.
- Якщо вона проходить без помилок — скрипт виведе повідомлення про успіх.
- Якщо ні — повідомить про помилку.
Перевіряємо статус виконання команд
Щоб не перевіряти $? вручну, можна скористатися скороченою формою:
- command && echo “Успіх” — друга команда виконується лише якщо перша пройшла без помилок.
- command || echo “Помилка” — друга команда виконується якщо перша завершилась з помилкою.
Наприклад:
ls /etc && echo "Директорія знайдена!" || echo "Не знайдено!"
Як зберегти код виходу в змінну?
Іноді потрібно використати код пізніше в скрипті. Для цього його можна зберегти у змінну:
date
status=$?
echo "Код виходу: $status"
Тепер змінна $status містить останній код виконання. Можна використовувати її в умовах або циклах.
Як встановити власний exit code у скрипті?
Якщо ти створюєш Bash-скрипт, можна самостійно задати код виходу за допомогою команди exit.
#!/bin/bash
grep -q "root" /etc/passwd
if [ $? -eq 0 ]; then
echo "Користувача root знайдено."
exit 0
else
echo "Користувача root не знайдено!" >&2
exit 1
fi
Тут:
- Якщо grep знайшов користувача root, скрипт завершується з кодом 0.
- Якщо ні — з кодом 1 (означає помилку).
Як швидко перевіряти команди?
Кілька практичних прикладів:
- Перевірити результат команди ping:
ping -c 1 google.com > /dev/null
echo $?
Якщо інтернет є — отримаєш 0. Якщо ні — 1 або будь-який інший код.
- Перевірити доступність файлу:
test -f /etc/passwd && echo "Файл існує" || echo "Файл не знайдено"
- Комбінувати кілька дій:
cp file.txt /backup/ && echo "Копіювання успішне" || echo "Помилка копіювання"
Такі комбінації допомагають автоматизувати дрібні завдання без написання великих скриптів.
Підсумок
Exit status — це один із базових, але ключових механізмів Linux. Він лежить в основі логіки Bash-скриптів, тестування, автоматизації та моніторингу. Ігнорування цього показника часто призводить до складнощів.
Тому перевіряти код виходу після виконання команд — це не опція, частина роботи з Linux. Саме з таких дрібних практик формується впевненість у своїй системі та професійний підхід до DevOps.
Хочеш розібратися в Linux глибше? На курсах від ITEDU навчишся впевнено працювати з терміналом, писати Bash-скрипти та автоматизувати процеси, як справжній DevOps-герой.