🐛 Типичные ошибки
⚡ Главные ошибки ДЗ 27 и 28
- ping_time неопределена — при неудачном пинге переменная пустая; нужна проверка
[ -z "$ping_time" ] - failures не сбрасывается — при успехе нужно делать
failures=0 - Маркеры конфликта в коде — если оставить
<<<<<<<в файле — код сломается
Ошибки в ДЗ 27: ping-скрипт
1. Переменная ping_time не определена при ошибке пинга
Проблема: Если
ping не достиг цели, строка icmp_seq не появится в выводе, и ping_time останется пустой строкой. При попытке сравнить пустую строку с числом bash выдаст ошибку.
# Неправильно: сравнение без проверки
if [ "$ping_time" -gt "$max_ping_time_ms" ]; then
# Правильно: сначала проверить, что переменная непустая
if [ -n "$ping_time" ] && [ "$ping_time" -gt "$max_ping_time_ms" ]; then
2. Счётчик failures инкрементируется, но не уменьшается при успехе
Проблема: Если пинг не удался дважды, а затем удался, счётчик
failures остаётся на 2, а не сбрасывается в 0. Следующий единственный неудачный пинг даст 3 — и сработает ложная тревога.
# Неправильно: нет сброса при успехе
if [ -z "$ping_time" ]; then
((failures++))
fi
# Правильно: сбрасывать при успехе
if [ -z "$ping_time" ]; then
((failures++))
else
failures=0 # сброс счётчика при успехе
fi
3. Синтаксис awk в подстановке команды
Проблема: Использование
$(echo "$ping_result" | awk -F'=' '{print $4}' ...) — популярная ошибка при экранировании кавычек внутри $().
# Потенциально проблемный синтаксис:
ping_time=$(echo "$ping_result" | awk -F'=' '{print $4}' | awk '{print $1}')
# Если возникают проблемы, можно разбить на переменные:
raw=$(echo "$ping_result" | awk -F'=' '{print $4}')
ping_time=$(echo "$raw" | awk '{print $1}' | awk -F'.' '{print $1}')
4. Флаг -z в условии
[ -z "$ping_time" ] — проверяет, является ли строка пустой (zero length). Противоположный флаг: [ -n "$ping_time" ] — строка непустая (non-empty).
5. Бесконечный цикл while true
Важно знать: Скрипт выполняется бесконечно. Для остановки нажмите
Ctrl+C в терминале. Это посылает процессу сигнал SIGINT.
Ошибки в ДЗ 28: merge конфликты
1. Оставить маркеры конфликта в файле
Проблема: Если при разрешении конфликта оставить маркеры
<<<<<<<, =======, >>>>>>> в файле — код перестанет работать (синтаксическая ошибка в скрипте или программе).
# Пример конфликта в файле:
<<<<<<< HEAD
echo "version from main branch"
=======
echo "version from feature branch"
>>>>>>> feature-branch
# После разрешения файл должен содержать только нужную версию:
echo "version from main branch"
2. Забыть git add после ручного разрешения
Проблема: Разрешили конфликт вручную, но забыли выполнить
git add <файл> перед git merge --continue. Git ещё считает файл конфликтующим.
# Правильная последовательность:
# 1. Отредактировать конфликтующий файл
# 2. Убрать маркеры, выбрать нужную версию
# 3. git add <файл> -- ОБЯЗАТЕЛЬНО!
# 4. git merge --continue
3. find -exec rm -rf без проверки
Опасно: Команда
find . -type d -name ".git" -exec rm -rf {} + безвозвратно удаляет историю коммитов во всех найденных репозиториях. Всегда делайте резервную копию перед выполнением!