🐛 Частые ошибки — Занятие 10

К оглавлению урока

⚡ Топ-3 ошибки

  1. echo PATH вместо echo $PATH — без $ выведется текст «PATH», а не значение переменной
  2. Забытый grep -v grep при подсчёте процессов — сам grep попадает в список и завышает счётчик
  3. Скрытый файл начинается с ..process_management, а не process_management; обычный ls его не покажет

Ошибка 1: echo PATH без знака доллара

Это самая частая ошибка при первом знакомстве с переменными.

Неправильно:
echo PATH
Вывод: PATH — буквальный текст, а не значение переменной.
Правильно:
echo $PATH
Вывод: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

Правило: для чтения значения переменной ВСЕГДА ставьте $ перед именем: $PATH, $HOME, $MY_VAR.

Ошибка 2: Забытый grep -v grep

При поиске процессов через grep сам запущенный процесс grep тоже попадает в список ps -ef.

Неправильно:
ps -ef | grep root | wc -l
Результат будет завышен на 1 (или больше), потому что grep root сам является процессом и содержит слово «root» в командной строке.
Правильно:
ps -ef | grep root | grep -v grep | wc -l
grep -v grep исключает строки, содержащие слово «grep».

Ошибка 3: Путаница с регистром переменных

Bash чувствителен к регистру: MY_VAR и my_var — это РАЗНЫЕ переменные.

Пример ошибки:
export MY_VAR=hello
echo $my_var
Вывод: (пустая строка) — переменная my_var не определена.
Правило: следите за регистром. Системные переменные — всегда БОЛЬШИЕ буквы (PATH, HOME). Свои переменные — тоже принято в БОЛЬШИХ буквах по соглашению.

Ошибка 4: Скрытый файл — имя начинается с точки

Файлы с именами, начинающимися с точки (.), являются скрытыми. Обычный ls их не показывает.

Пример ошибки: создали файл process_management (без точки) вместо .process_management. При проверке через ls -la преподаватель не найдёт ДЗ-файл с нужным именем.
Правильно:
# Создать скрытый файл (точка в начале!)
touch .process_management

# Убедиться, что файл создан (нужен флаг -a для скрытых)
ls -la | grep process_management

Ошибка 5: Пробелы при объявлении переменной

Неправильно:
export MY_VAR = hello
Bash воспримет это как попытку запустить команду MY_VAR с аргументами = и hello.
Правильно:
export MY_VAR=hello
При объявлении переменной знак = пишется БЕЗ пробелов.