Каждая команда, завершаясь, сообщает число — по нему видно, удалась ли она.
Это число — код завершения, тот же, что скрипт задаёт командой exit N. Ноль значит успех, любое число от 1 до 255 — сбой, а номер показывает причину. Номера у каждой программы свои: у curl 6 — имя сервера не нашлось, 7 — не удалось подключиться, 28 — истекло время ожидания. На экран код не попадает, его хранит оболочка.
Код последней команды лежит в переменной $?, и его печатают через echo. Так ты увидишь, чем закончился запрос curl к приложению, которое лежит.
Посмотри код curl
В ~/health-lab выполни две команды: запрос к приложению с печатью кода curl, а потом ещё раз печать $?.
Сначала предположи
Первая команда напечатает код curl. Что напечатает вторая?
Теперь начни упражнение, выполни команду и сверь прогноз с выводом.
$? хранит код одной команды — последней. Любая следующая команда, даже echo, кладёт туда свой код. Поэтому $? читают сразу после нужной команды: строкой ниже там уже код другой.
В healthcheck.sh между curl и условием стоит echo "checked at …". Условие if [ $? -eq 0 ] получило код этого echo — ноль, — и скрипт напечатал OK.